結果
問題 | No.670 log は定数 |
ユーザー |
|
提出日時 | 2020-09-01 03:40:17 |
言語 | C (gcc 13.3.0) |
結果 |
AC
|
実行時間 | 1,510 ms / 4,000 ms |
コード長 | 1,298 bytes |
コンパイル時間 | 551 ms |
コンパイル使用メモリ | 31,360 KB |
実行使用メモリ | 5,248 KB |
最終ジャッジ日時 | 2024-11-17 06:19:21 |
合計ジャッジ時間 | 17,300 ms |
ジャッジサーバーID (参考情報) |
judge5 / judge2 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
#include<stdio.h>#include<stdlib.h>#include<string.h>#define MAXN 200010#define N 0x7fffffff/MAXN+2int compareInt(const void* a, const void* b);int next();unsigned long long seed;int a[MAXN];int b[N];int place[N];int main() {int n, q;scanf("%d%d%llu", &n, &q, &seed);for(int i = 0; i < 10000; i++) next();for(int i = 0; i < n; i++) a[i] = next();qsort(a, n, sizeof(int), compareInt);memset(place, -1, sizeof(place));for(int i = 0; i < n; i++) {int now = a[i]/MAXN;b[now+1]++;if(place[now] == -1) place[now] = i;}for(int i = 1; i < N; i++) {b[i] += b[i-1];}for(int i = N-2; i >= 0; i--) {if(place[i] == -1) place[i] = place[i+1];}long long ans = 0;for(int i = 0; i < q; i++) {int x = next();int now = x/MAXN;long long ima = b[now];for(int j = place[now]; j < n; j++) {if(a[j] >= x) break;ima++;}ans ^= ima*i;}printf("%lld\n", ans);return 0;}int compareInt(const void* a, const void* b) {int aNum = *(int*)a;int bNum = *(int*)b;if( aNum < bNum ){return -1;}else if( aNum > bNum ){return 1;}return 0;}int next() {seed = seed ^ (seed << 13);seed = seed ^ (seed >> 7);seed = seed ^ (seed << 17);return (seed >> 33);}