样例都过不了,想问一下到底是哪出错了。
#include<bits/stdc++.h>
#define int long long
using namespace std;
inline int read() {
int x=0,f=0;char ch=getchar();
for(;!isdigit(ch);ch=getchar()) f|=(ch=='-');
for(;isdigit(ch);ch=getchar()) x=(x<<1)+(x<<3)+(ch^48);
return f?-x:x;
}
void print(int x) {
if(x<0) putchar('-'),x=-x;
if(x>9) print(x/10);
putchar(x%10+48);
}
int n,m,tot,root=1;
namespace ss{
#define lson tree[pos].ls
#define rson tree[pos].rs
struct node{
int sum,ls,rs;
}tree[4023121];
void Insert(int &pos,int l,int r,int k) {
if (!pos) {
pos=++tot;
}
if (l==r) {
tree[pos].sum++; return ;
}
int mid=l+r>>1;
if (k<=tree[lson].sum) Insert(lson,l,mid,k);
else Insert(rson,mid+1,r,k);
tree[pos].sum=tree[lson].sum+tree[rson].sum;
}
int kth(int pos,int l,int r,int k) {
if (l==r) return l;
int mid=l+r>>1;
if (k<=mid) {
return kth(lson,l,mid,k);
}
else {
return kth(rson,mid+1,r,k-tree[lson].sum);
}
}
}
signed main() {
n=read();
for (int i=1;i<=n;++i) {
int x=read();
ss::Insert(root,-1e9,1e9,x);
}
m=read();
for (int i=1;i<=m;++i) {
string ch;
cin>>ch;
if (ch=="add") {
int x=read();
n+=1;
ss::Insert(root,-1e9,1e9,x);
}
if (ch=="mid") {
print(ss::kth(1,-1e9,1e9,(n+1)/2));
putchar('\n');
}
}
return 0;
}