Compile Error
/in/foo.cc: In function 'void pop()': /in/foo.cc:22:24: warning: suggest parentheses around '+' inside '>>' [-Wparentheses] int tmpmx = zkw[(M + x >> ((x & 0xffff) ? __ffs[(x & 0xffff)] ~~^~~ /in/foo.cc: In function 'int main()': /in/foo.cc:32:44: warning: pointer to a function used in arithmetic [-Wpointer-arith] for (int i = 1; i < (1 << 16); ++i) ffs[i] = (i & 1) ? 0 : (ffs[i >> 1] + 1); ^ /in/foo.cc:32:73: warning: pointer to a function used in arithmetic [-Wpointer-arith] for (int i = 1; i < (1 << 16); ++i) ffs[i] = (i & 1) ? 0 : (ffs[i >> 1] + 1); ^ /in/foo.cc:32:77: warning: pointer to a function used in arithmetic [-Wpointer-arith] for (int i = 1; i < (1 << 16); ++i) ffs[i] = (i & 1) ? 0 : (ffs[i >> 1] + 1); ^ /in/foo.cc:32:78: error: assignment of read-only location '*(ffs + ((sizetype)i))' for (int i = 1; i < (1 << 16); ++i) ffs[i] = (i & 1) ? 0 : (ffs[i >> 1] + 1); ^ /in/foo.cc:32:78: error: cannot convert 'int (*)(int) throw ()' to 'int(int) throw ()' in assignment
代码
#include <bits/stdc++.h>
using namespace std;
int seed, n;
int rnd() { return seed = (seed * 19260817ll + 20230853) & INT_MAX; }
constexpr int N = 1e8 + 9, M = 1 << 27;
int a[N], zkw[1 << 28];
int __ffs[1 << 16];
int tot, mx;
inline void push(int x) {
a[++tot] = x;
zkw[M + tot] = tot;
for (int pos = M + tot; pos & 1; pos >>= 1)
zkw[pos >> 1] = a[zkw[pos]] < a[zkw[pos ^ 1]] ? zkw[pos] : zkw[pos ^ 1];
if (a[mx] > x) mx = tot;
}
inline int top() { return a[mx]; }
inline void pop() {
a[mx] = INT_MAX;
for (int pos = M + mx; zkw[pos >> 1]; pos >>= 1)
zkw[pos >> 1] = a[zkw[pos]] < a[zkw[pos ^ 1]] ? zkw[pos] : zkw[pos ^ 1];
for (int x = tot + 1; x; x &= x - 1) {
int tmpmx = zkw[(M + x >> ((x & 0xffff) ? __ffs[(x & 0xffff)]
: __ffs[x >> 16] + 16)) -
1];
if (a[mx] > a[tmpmx]) mx = tmpmx;
}
}
int main() {
cin >> n >> seed;
int ans = 0;
a[0] = INT_MAX;
for (int i = 1; i < (1 << 16); ++i) ffs[i] = (i & 1) ? 0 : (ffs[i >> 1] + 1);
for (int i = 1; i <= (n >> 1); ++i) push(rnd());
for (int i = 1; i <= (n >> 1); ++i) {
switch (rnd() % 3) {
case 0:
push(rnd());
break;
case 1:
pop();
break;
default:
ans ^= top();
}
}
cout << ans << endl;
return 0;
}
信息
- 递交者
- 类型
- 递交
- 题目
- P1004 Heaptester
- 语言
- C++
- 递交时间
- 2020-12-19 22:53:47
- 评测时间
- 2020-12-19 22:53:47
- 评测机
- 分数
- 0
- 总耗时
- 0ms
- 峰值内存
- 0 Bytes