逆天,treap数用vector写过,
  • 板块灌水区
  • 楼主Mr_yeh
  • 当前回复0
  • 已保存回复0
  • 发布时间2024/6/6 20:05
  • 上次更新2024/6/6 20:12:40
查看原帖
逆天,treap数用vector写过,
852827
Mr_yeh楼主2024/6/6 20:05

P1486

#include<bits/stdc++.h>
using namespace std;
vector<int>v;
int minn,ans;
void add(int k){
	if(k>=minn){
		v.insert(lower_bound(v.begin(),v.end(),k),k);
	}
}
void pluss(int k){
	for(int i=0;i<v.size();i++){
		v[i]+=k;
	}
}
void subtract(int k){
	for(int i=0;i<v.size();i++){
		v[i]-=k;
		if(v[i]<minn){
			ans++;
			//printf("标记%d\n",v[i]);
		}
	}
	for(auto it=v.begin();it!=v.end();it++){
		//printf("有%d\n",*it);
		if(*it<minn){
			int u=*it;
			it=v.erase(it);
			//printf("minn为%d 删除%d\n",minn,u);
			it--;
		}
	}
}
void quest(int k){
	if(k>v.size()){
		printf("-1\n");
	}else{
		printf("%d\n",v[v.size()-k]);
	}
}
int main(){
	char c[10];
	int n;
	scanf("%d%d",&n,&minn);
	while(n--){
		int k;
		cin>>c[0];
		scanf("%d",&k);
		if(c[0]=='I'){
			add(k);
		}else if(c[0]=='A'){
			pluss(k);
		}else if(c[0]=='S'){
			subtract(k);
		}else if(c[0]=='F'){
			quest(k);
		}
	}
	printf("%d\n",ans);
	return 0;
}
2024/6/6 20:05
加载中...