为什么CE啊

P1801 黑匣子

你有两个 $t$ 。
by qwqUwU @ 2023-09-05 13:15:33


默认是局部变量,调用全局变量要写成 ```::t``` 。
by qwqUwU @ 2023-09-05 13:16:30


63行定义的t覆盖了第7行的,导致编译器认为你在对第63行的t进行取下标,此时,编译器找不到对int取下标的运算符,就会报错
by wzhm54nr @ 2023-09-05 13:25:54


因为你第63行的`int t;`它就会以为你用的是这个变量,C++是有就近原则的,所以你应该换个变量名 改了之后的代码:(亲测${\color{#052242}MLE}+{\color{#9D3DCF}RE}+{\color{#52C41A}AC}$) ```cpp #include<bits/stdc++.h> using namespace std; const int N = 2e5 + 5; struct node{ int ls, rs; int si, pri, key; }t[200005]; int cnt, root; void build(int x) { t[++cnt].si = 1; t[cnt].ls = t[cnt].rs = 0; t[cnt].key = x; t[cnt].pri = rand(); } void update(int u) { t[u].si = t[t[u].ls].si + t[t[u].rs].si + 1; } void split(int u, int x, int &l, int &r) { if(u == 0) return; if(t[u].key <= x) { l = u; split(t[u].rs, x, t[u].rs, r); } else { r = u; split(t[u].ls, x, l, t[u].ls); } update(u); } int merge(int l, int r) { if(l == 0 or r == 0) return l + r; if(t[l].pri > t[r].pri) { t[l].rs = merge(t[l].rs, r); update(l); return l; } else { t[r].ls = merge(l, t[r].ls); update(r); return r; } } void Insert(int x) { int l, r; split(root, x, l, r); build(x); root = merge(merge(l, cnt), r); } int kth(int u, int k) { if(k == t[t[u].ls].si + 1) return u; if(k <= t[t[u].ls].si) return kth(t[u].ls, k); if(k > t[t[u].ls].si) return kth(t[u].rs, k - t[t[u].ls].si - 1); } int n, m, x; int a[N], flag[N]; int main() { std::ios::sync_with_stdio(0); srand(time(NULL)); cin>>n>>m; for(int i = 1; i <= n; i++) cin>>a[i]; int p; for(int i = 1; i <= m; i++) { cin>>p; flag[p]++; } for(int i = 1; i <= n; i++) { Insert(a[i]); while(flag[i] >= 1) { x++; cout<< t[ kth(root, x) ].key <<'\n'; flag[i]--; } } return 0; } ``` 如果你想AC就这么改: ```cpp #include<bits/stdc++.h> using namespace std; int a[200005]; int main() { priority_queue<int>A;//堆可是个好东西 priority_queue<int, vector<int>, greater<int>>B; int n, m, r = 1, q; cin >> n >> m; for (int i = 1; i <= n; i++)scanf("%d", &a[i]); for (int i = 1; i <= m; i++) { cin >> q; for (int j = r; j <= q; j++) { A.push(a[j]); if (A.size() == i)B.push(A.top()), A.pop(); } r = q + 1; printf("%d\n", B.top()); A.push(B.top()), B.pop(); } return 0; } ```
by kkksc999 @ 2023-09-05 13:30:30


谢谢各位大佬!!!Orz
by Midnight_szx @ 2023-09-05 13:37:52


|