diff --git a/day10/U88589/U88589.cpp b/day10/U88589/U88589.cpp index dc742ab..f92893a 100644 --- a/day10/U88589/U88589.cpp +++ b/day10/U88589/U88589.cpp @@ -1,112 +1,55 @@ -/* -[set容器] -- `1 x`: 插入一个值为 $x$ 的数; - -- `2 x`: 删除一个值为 $x$ 的数,保证存在,若有多个只删除 $1$ 个; - -- `3 l r`: 询问所有满足 $l\le x\le r$ 的 $x$ 的和;[排序] - -- `4 x`: 询问集合中 <= x 的最大数,若没有输出 `-1`; - -- `5 x`: 询问集合中 >= x 的最小数,若没有输出 `-1`; - -1 2 - -*/ - +//暴力 80point 逆天了,样例太水了 #include using namespace std; -#define int long long -const int MAX_X=1e5+5; -int q; -vectorv(MAX_X); -set s; -int getint(); +const int MAX_N = 5e8+5; +int a[MAX_N]; -signed main(signed argc,char *argv[]){ - #ifdef OITEST - cout<<"TESTING"<=3){ - ans_num++; - } - #endif - if(n==1){ - const int x=getint(); - /*auto state = */s.insert(x); - if(x>=v.size())v.resize(x+1); - v[x]++; - }else if (n==2) { - const int x=getint(); - v[x]--; - if(v[x]==0){s.erase(x);} - }else if(n==3){ - const int l=getint(),r=getint(); - const auto sl=s.lower_bound(l) - ,sr=s.lower_bound(r); +int readint(); + +int main(){ + // auto a = new int[MAX_N]; + const int n = readint(); + for(int i=1;i<=n;i++){ + const int m = readint(); + if(m==1){ + const int x=readint(); + a[x]++; + }else if(m==2){ + const int x=readint(); + a[x]--; + }else if(m==3){ + const int l=readint(),r=readint(); int ans=0; - for(auto i=sl;i!=sr;i++){ - ans+=(*i)*v[(*i)]; - } - if ((*sr)==r) { - ans+=(*sr)*v[(*sr)]; + for(int j=l;j<=r;j++){ + ans+=j*a[j]; } cout<=0;j--){ + if(a[j]){ + cout<>cans; - ss>>myans; - ASM(cans,myans) - } - #endif } -int getint(){ +int readint(){ int x=0,w=1; char ch=0; while(!isdigit(ch)){