Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class Multiset
- {
- public:
- int n,aib[1000001];
- Multiset(int n)
- {
- this->n=n;
- for(int i=0; i<=n; i++)aib[i]=0;
- }
- void Insert(int x)
- {
- for(int i=x; i<=n; i+=(i&-i))
- ++aib[i];
- }
- int Find(int x)
- {
- int y=0;
- for(int k=(1<<19); k>=1; k/=2)
- if(y+k<n && aib[y+k]<x)
- x=x-aib[y+k],y+=k;
- return y+1;
- }
- void Erase(int x)
- {
- int y=Find(x);
- for(int i=y; i<=n; i+=(i&-i))
- --aib[i];
- }
- };
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement