結果
| 問題 |
No.1282 Display Elements
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-11-06 22:15:11 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
RE
|
| 実行時間 | - |
| コード長 | 1,659 bytes |
| コンパイル時間 | 1,252 ms |
| コンパイル使用メモリ | 100,412 KB |
| 実行使用メモリ | 17,036 KB |
| 最終ジャッジ日時 | 2024-07-22 13:01:05 |
| 合計ジャッジ時間 | 3,775 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 17 WA * 3 RE * 4 |
ソースコード
#include <iostream>
#include <vector>
#include <string>
#include <cmath>
#include <algorithm>
#include <map>
using namespace std;
struct segK{//非再帰
int n;
long long MIN;
int size;
vector<long long> dat;
segK(int n_){
n = 1;
MIN = 0;
size = n_;
while(n < n_) n *= 2;
dat.resize(2 * n);
for(int i = 1; i < 2 * n; i++) dat[i] = MIN;
}
void update(int k, long long a){
k += n;
dat[k] = a;
while(k > 0){
k >>= 1;
dat[k] = dat[k << 1 | 0] + dat[k << 1 | 1];
}
}
long long query(int l, int r){
long long res = 0;
l += n;
r += n;
while(r > l){
if(l & 1) res += dat[l++];
if(r & 1) res += dat[--r];
l >>= 1;
r >>= 1;
}
return res;
}
};
int main(){
ios::sync_with_stdio(false);
cin.tie(nullptr);
int N;
cin >> N;
segK seg(100010);
vector<long long> a(N), b(N);
for(int i = 0; i < N; i++) cin >> a[i];
for(int i = 0; i < N; i++) cin >> b[i];
map<int, int> m;
vector<int> vec;
for(int i = 0; i < N; i++){
vec.push_back(a[i]);
vec.push_back(b[i]);
}
sort(vec.begin(), vec.end());
int index = 0;
for(int i = 0; i < 2 * N; i++){
if(m.count(vec[i])) continue;
m[vec[i]] = index;
index++;
}
long long cnt = 0;
sort(a.begin(), a.end());
for(int i = 0; i < N; i++){
int ind = m[b[i]];
seg.update(ind, 1);
int ind2 = m[a[i]];
cnt += seg.query(0, ind2);
}
cout << cnt << endl;
}