結果
問題 | No.670 log は定数 |
ユーザー |
|
提出日時 | 2018-07-28 04:44:06 |
言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
結果 |
AC
|
実行時間 | 1,438 ms / 4,000 ms |
コード長 | 1,053 bytes |
コンパイル時間 | 1,727 ms |
コンパイル使用メモリ | 199,052 KB |
最終ジャッジ日時 | 2025-01-06 12:10:06 |
ジャッジサーバーID (参考情報) |
judge3 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 10 |
ソースコード
//=================================// Created on: 2018/07/28 04:24:07//=================================#include <bits/stdc++.h>#define show(x) std::cerr << #x << " = " << x << std::endlusing ll = long long;using ull = unsigned long long;int main(){int N, Q;ull seed;std::cin >> N >> Q >> seed;int B = 1 << 2, S = 1 << 30;for (; B < N; B <<= 1, S >>= 1) {}std::vector<std::vector<int>> in(B);auto next = [&]() { return seed = seed ^ (seed << 13), seed = seed ^ (seed >> 7), seed = seed ^ (seed << 17), (seed >> 33); };for (int i = 0; i < 10000; i++) next();std::vector<int> A(N), C(B, 0);for (int i = 0; i < N; i++) { A[i] = next(), in[A[i] / S].push_back(A[i]); }for (int i = 1; i < B; i++) { C[i] = C[i - 1] + in[i - 1].size(); }ll ans = 0;for (ll i = 0; i < Q; i++) {const int x = next(), b = x / S;ll sub = C[b];for (const int e : in[b]) { sub += (e < x ? 1 : 0); }ans ^= (sub * i);}std::cout << ans << std::endl;return 0;}