线段树求调
查看原帖
线段树求调
696967
int_Hello_world楼主2022/8/7 20:25

样例都过不了,想问一下到底是哪出错了。

#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;
}
2022/8/7 20:25
加载中...