块状数组96pts求调试
查看原帖
块状数组96pts求调试
576467
鲤鱼江我推的小圆楼主2024/7/10 17:11

自己胡的写法,可能有锅。

在执行操作2时RE。

#include<bits/stdc++.h>

using namespace std;

inline int read(){
	int x=0,f=0;
	char c=getchar();
	while(c<'0'||c>'9'){f|=(c=='-');c=getchar();}
	while(c>='0'&&c<='9'){x=(x<<3)+(x<<1)+c-'0';c=getchar();}
	return f?-x:x;
}

struct node{
	node *ne;
	vector < int > d;
	node(){d.clear();ne=NULL;}
	inline void pop(){d.pop_back();}
	inline int size(){return d.size();}
	inline int back(){return d.back();}
	inline bool empty(){return d.empty();}
	inline void push(const int x){d.emplace_back(x);}
	inline void erase(const int x){d.erase(lower_bound(d.begin(),d.end(),x));}
	inline void insert(const int x){d.insert(lower_bound(d.begin(),d.end(),x),x);}
	inline int rank(const int x){return distance(d.begin(),lower_bound(d.begin(),d.end(),x));}
}*h=NULL,*tmp,*r;
int n,lenth=1100,ans,las,m;

inline void check(node *x){
	if(x->size()>=(lenth<<1)){
		node *p=new node;
		for(int i=lenth;i<x->size();++i) p->push(x->d[i]);
		x->d.resize(lenth);p->ne=x->ne;x->ne=p;
		return ;
	}
}

inline void insert(const int x){
	for(r=h;r->ne!=NULL;r=r->ne) if(r->empty()||r->back()>=x) break;
	r->insert(x);check(r);
}

inline void erase(const int x){
	for(r=h;r->ne!=NULL;r=r->ne) if(r->back()>=x) break;
	r->erase(x);check(r);
}

inline int queryrank(const int x){
	int res=0;
	for(r=h;r->ne!=NULL;r=r->ne){
		if(r->back()>=x) break;
		res+=r->size();
	}
	return res+r->rank(x)+1;
}

inline int kth(int k){
	for(r=h;r->ne!=NULL;r=r->ne){
		if(k>r->size()) k-=r->size();
		else break;
	}
	return r->d[k-1];
}
inline int pre(const int x){return kth(queryrank(x)-1);}
inline int suf(const int x){return kth(queryrank(x+1));}

int main(){
	n=read();m=read();h=new node;
	for(int i=1;i<=n;++i) insert(read());
	for(int i=1,opt,x;i<=m;++i){
		opt=read();x=read()^las;
		if(opt==1) insert(x);
		else if(opt==2) erase(x);
		else if(opt==3) las=queryrank(x);
		else if(opt==4) las=kth(x);
		else if(opt==5) las=pre(x);
		else las=suf(x);
		if(opt>=3) ans^=las;
	}
	printf("%d\n",ans);
	return 0;
}
2024/7/10 17:11
加载中...