显然这题的所有操作都可以用set,但是直接用set肯定要T,考虑到读入量较大,使用fread读入优化,就可以卡过去了。
#include<bits/stdc++.h> using namespace std; void read(int& x){ const int k=1600000; static char v, u[k],*s=u,*t=u; x=0; while(isspace(v=s==t &&u==(t=u+fread(s=u, 1,k,stdin))?-1:*s++)); do x=x*10+v-48; while(isdigit(v=s==t &&u==(t=u+fread(s=u, 1,k,stdin))?-1:*s++)); } int main(){ set<int> s; set<int>::iterator i; int n,m,u,v; read(n),read(m); while(m--){ read(u); if(u!=3&&u!=4) read(v); if(u==1) s.insert(v); if(u==2) s.erase(v); if(u==5) printf("%d\n", (i=s.lower_bound(v)) !=s.begin()?*--i:-1); if(u==6) printf("%d\n", (i=s.upper_bound(v)) !=s.end()?*i:-1); if(u==7) printf("%d\n", s.count(v)?1:-1); if(u==3) printf("%d\n", s.size()?*s.begin():-1); if(u==4) printf("%d\n", s.size()?*--s.end():-1); } }
时间: 2024-10-22 20:03:44