0分求助
  • 板块P6301 集合
  • 楼主dying
  • 当前回复1
  • 已保存回复1
  • 发布时间2021/6/7 10:53
  • 上次更新2023/11/4 22:12:18
查看原帖
0分求助
85593
dying楼主2021/6/7 10:53

我做这道题并不是想A它,主要是练一下平衡树,所以写了个平衡树,WA*4 TLE*3,T掉我认了,为什么前面会WA?在苦思无果后用了std::set,错误一模一样。 应该不是我平衡树的锅,所以这里就放我第二份代码了(set的)

#include<bits/stdc++.h>
//#define int long long
using namespace std;
inline int read(){
	int x=0,f=1;char ch=getchar();
	while (!isdigit(ch)){if (ch=='-') f=-1;ch=getchar();}
	while (isdigit(ch)){x=x*10+ch-48;ch=getchar();}
	return x*f;
}
void print(int a){
	if(a<0)putchar('-'),a=-a;
	if(a>=10)print(a/10);
	putchar(a%10+48);
}

set<int>T;
int n=read(),m=read(),last;

signed main(){
    T.insert(-1);
    int ans=0;
	while(m--){
		int op=read();
		switch(op){
			case 1:{
                int x=read()+last;
				T.insert(x);
				break;
			}
			case 2:{
                int x=read()+last;
                T.erase(x);
				break;
			}
			case 3:{
                auto it=T.begin();it++;
                ans+=(last=*it);
				break;
			}
			case 4:{
                if(T.empty()){ans+=(last=-1);break;}
                auto it=T.end();it--;ans+=(last=*it);
				break;
			}
			case 5:{
                ans+=(last=T.size()-1);
				break;
			}
            case 6:{
                int x=read()+last;
                ans+=(last=T.count(x));
                break;
            }
            case 7:{
                int x=read()+last;
                auto val=T.lower_bound(x);val--;
                ans+=(last=*val);
                break;
            }
            case 8:{
                int x=read()+last;
                auto val=T.lower_bound(x);
                ans+=(last=(val==T.end()?-1:*val));
                break;
            }
		}
	}
    print(ans);
	return ~EOF;
}
2021/6/7 10:53
加载中...