你有两个 $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