Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define F first
- #define S second
- #define pii pair<int,int>
- using namespace std;
- int ft[(int)4e5+1] = {0} , maxn=4e5;
- void update(int i , int x){
- for(;i<=maxn;i+=(i&-i)) ft[i]+=x;
- return;
- }
- int query(int i){
- int sum = 0;
- for(;i>0;i-=(i&-i)) sum+=ft[i];
- return sum ;
- }
- int main(){
- int n , m;
- cin>>n>>m ;
- map<int,int> vis;
- vector<int> s;
- vector<int> e(n+1);
- for(int i=1;i<=n;i++){
- cin>>e[i];
- if(vis[e[i]]) continue;
- vis[e[i]]=1;
- s.push_back(e[i]);
- }
- pair<char,pii> qu[m];
- for(int i=0;i<m;i++){
- cin>>qu[i].F>>qu[i].S.F>>qu[i].S.S;
- if(qu[i].F == '?') continue;
- if(vis[qu[i].S.S]) continue;
- vis[qu[i].S.S]=1;
- s.push_back(qu[i].S.S);
- }
- sort(s.begin(),s.end());
- for(int i=1;i<=n;i++){
- auto it = lower_bound(s.begin(),s.end(),e[i]);
- int id = it-s.begin()+1;
- update(id,1);
- }
- for(int i=0;i<m;i++){
- if(qu[i].F == '!'){
- auto it = lower_bound(s.begin(),s.end(),e[qu[i].S.F]);
- int id = it-s.begin();
- update(id+1,-1);
- e[qu[i].S.F] = qu[i].S.S;
- it = lower_bound(s.begin(),s.end(),qu[i].S.S);
- id = it-s.begin() ;
- update(id+1,+1);
- continue;
- }
- auto it = lower_bound(s.begin(),s.end(),qu[i].S.F);
- int id = it-s.begin() ;
- it = upper_bound(s.begin(),s.end(),qu[i].S.S);
- int id1 = it-s.begin() ;
- cout << query(id1)-query(id) << endl ;
- }
- return 0 ;
- }
Advertisement
Add Comment
Please, Sign In to add comment