結果
| 問題 |
No.670 log は定数
|
| コンテスト | |
| ユーザー |
|
| 提出日時 | 2020-01-31 16:36:55 |
| 言語 | C++14 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 2,863 ms / 4,000 ms |
| コード長 | 1,043 bytes |
| コンパイル時間 | 724 ms |
| コンパイル使用メモリ | 77,748 KB |
| 実行使用メモリ | 13,512 KB |
| 最終ジャッジ日時 | 2024-09-17 06:51:56 |
| 合計ジャッジ時間 | 31,069 ms |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
#include<iostream>
#include<vector>
#include<algorithm>
using namespace std;
using ll = long long;
using ull = unsigned long long;
ull seed;
int next() {
seed = seed ^ (seed << 13);
seed = seed ^ (seed >> 7);
seed = seed ^ (seed << 17);
return (seed >> 33);
}
int len = (1ll<<31)/(200000)+1;
vector<int> block[200001];
vector<int> cnt(200001, 0);
int main() {
int n, q;
cin >> n >> q >> seed;
for (int i = 0; i < 10000; i++) next();
vector<int> a(n);
for (int i = 0; i < n; i++) a[i] = next();
sort(a.begin(), a.end());
for(int i = 0; i < n; i++){
block[a[i]/len].push_back(a[i]);
cnt[a[i]/len]++;
}
for(int i = 1; i < 200001; i++) cnt[i] += cnt[i-1];
ll sum = 0;
for(int i = 0; i < q; i++){
int x = next();
int pos = x/len;
int tmp = pos==0 ? 0 : cnt[pos-1];
for(int j : block[pos]){
if(j < x) tmp++;
else break;
}
sum ^= (ll)tmp * i;
}
cout << sum << endl;
return 0;
}