結果
| 問題 |
No.670 log は定数
|
| コンテスト | |
| ユーザー |
yosupot
|
| 提出日時 | 2017-09-10 16:37:55 |
| 言語 | D (dmd 2.109.1) |
| 結果 |
AC
|
| 実行時間 | 2,643 ms / 4,000 ms |
| コード長 | 868 bytes |
| コンパイル時間 | 1,483 ms |
| コンパイル使用メモリ | 144,616 KB |
| 実行使用メモリ | 6,944 KB |
| 最終ジャッジ日時 | 2024-06-12 21:53:37 |
| 合計ジャッジ時間 | 29,959 ms |
|
ジャッジサーバーID (参考情報) |
judge3 / judge4 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | AC * 10 |
ソースコード
import std.stdio, std.algorithm, std.range;
ulong seed;
int next() {
seed = seed ^ (seed << 13);
seed = seed ^ (seed >> 7);
seed = seed ^ (seed << 17);
return cast(int)(seed >> 33);
}
immutable B = 200000;
immutable S = (1L<<32) / B + 1;
void main() {
int n; int q;
readf("%d %d %d\n", &n, &q, &seed);
foreach (i; 0..10000) next();
int[] a = new int[n];
foreach (i; 0..n) a[i] = next();
a.sort!"a<b";
int[] l = new int[B];
int[] r = new int[B];
int c = 0;
foreach (i; 0..B) {
l[i] = c;
while (c < n && (a[c] / S) == i) c++;
r[i] = c;
}
long query(int x) {
int i = x / S;
return a[l[i]..r[i]].assumeSorted.lowerBound(x).length + l[i];
}
long sm = 0;
foreach (i; 0..q) {
int x = next();
sm ^= query(x) * i;
}
writeln(sm);
}
yosupot