結果
| 問題 |
No.404 部分門松列
|
| コンテスト | |
| ユーザー |
37kt_
|
| 提出日時 | 2016-09-27 10:00:48 |
| 言語 | C++11(廃止可能性あり) (gcc 13.3.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 2,621 bytes |
| コンパイル時間 | 1,492 ms |
| コンパイル使用メモリ | 170,152 KB |
| 実行使用メモリ | 21,480 KB |
| 最終ジャッジ日時 | 2024-11-21 07:15:06 |
| 合計ジャッジ時間 | 14,461 ms |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 3 WA * 1 |
| other | AC * 1 WA * 30 |
ソースコード
/* template.cpp [[[ */
#include <bits/stdc++.h>
using namespace std;
#define get_macro(a, b, c, d, name, ...) name
#define rep(...) get_macro(__VA_ARGS__, rep4, rep3, rep2, rep1)(__VA_ARGS__)
#define rrep(...) get_macro(__VA_ARGS__, rrep4, rrep3, rrep2, rrep1)(__VA_ARGS__)
#define rep1(n) rep2(i_, n)
#define rep2(i, n) rep3(i, 0, n)
#define rep3(i, a, b) rep4(i, a, b, 1)
#define rep4(i, a, b, s) for (ll i = (a); i < (ll)(b); i += (ll)s)
#define rrep1(n) rrep2(i_, n)
#define rrep2(i, n) rrep3(i, 0, n)
#define rrep3(i, a, b) rrep4(i, a, b, 1)
#define rrep4(i, a, b, s) for (ll i = (ll)(b) - 1; i >= (ll)(a); i -= (ll)s)
#define each(x, c) for (auto &&x : c)
#define fs first
#define sc second
#define all(c) begin(c), end(c)
using ui = unsigned;
using ll = long long;
using ul = unsigned long long;
using ld = long double;
const int inf = 1e9 + 10;
const ll inf_ll = 1e18 + 10;
const ll mod = 1e9 + 7;
const ll mod9 = 1e9 + 9;
const int dx[]{-1, 0, 1, 0, -1, 1, 1, -1};
const int dy[]{0, -1, 0, 1, -1, -1, 1, 1};
template<class T, class U> void chmin(T &x, const U &y){ x = min<T>(x, y); }
template<class T, class U> void chmax(T &x, const U &y){ x = max<T>(x, y); }
struct prepare_ { prepare_(){ cin.tie(nullptr); ios::sync_with_stdio(false); cout << fixed << setprecision(12); } } prepare__;
ll in(){ ll x; cin >> x; return x; }
vector<ll> in(size_t n){ vector<ll> v(n); each(x, v) cin >> x; return v; }
/* ]]] */
ll n;
ll a[200000];
ll q;
ll l[200000], h[200000];
ll c[2][2][200000];
ll bit[400010];
void init(){
memset(bit, 0, sizeof(bit));
}
void add(ll k, ll x){
k++;
while (k < 400010){
bit[k] += x;
k += k & -k;
}
}
ll sum(ll k){
ll s = 0;
while (k){
s += bit[k];
k -= k & -k;
}
return s;
}
ll sum(ll a, ll b){
return sum(b) - sum(a);
}
int main(){
cin >> n;
rep(i, n) cin >> a[i];
cin >> q;
rep(i, q) cin >> l[i] >> h[i], h[i]++;
vector<int> z;
rep(i, n) z.push_back(a[i]);
rep(i, q) z.push_back(l[i]);
rep(i, q) z.push_back(h[i]);
sort(all(z));
z.erase(unique(all(z)), end(z));
rep(i, n) a[i] = lower_bound(all(z), a[i]) - begin(z);
rep(i, q) l[i] = lower_bound(all(z), l[i]) - begin(z);
rep(i, q) h[i] = lower_bound(all(z), h[i]) - begin(z);
init();
rep(i, n) c[0][0][i] = sum(a[i]), add(a[i], 1);
init();
rrep(i, n) c[0][1][i] = sum(a[i]), add(a[i], 1);
init();
rep(i, n) c[1][0][i] = sum(a[i] + 1, z.size()), add(a[i], 1);
init();
rrep(i, n) c[1][1][i] = sum(a[i] + 1, z.size()), add(a[i], 1);
init();
rep(i, n) add(a[i], c[0][0][i] * c[0][1][i] + c[1][0][i] * c[1][1][i]);
rep(i, q) cout << sum(l[i], h[i]) << endl;
}
37kt_