Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- using namespace std;
- template <typename T>
- class Fenwick{
- public:
- vector<T> bit;
- Fenwick(int size):bit(size+1){}
- void add(int id,T val){
- for(;id<bit.size();id|=(id+1))
- bit[id]+=val;
- }
- T sum(int id){
- T res={0};
- for(;id>=0;id=(id&(id+1))-1)
- res+=bit[id];
- return res;
- }
- };
- int main(){
- ios_base::sync_with_stdio(false);
- cin.tie(0);
- cout.tie(0);
- int n,q;
- cin>>n>>q;
- vector<int> a;
- vector<int> v(n+1);
- for(int i=0;i<n;i++){
- int x;
- cin>>x;
- v[i]=x;
- a.push_back(x);
- }
- vector<pair<int,pair<int,int>> >query(q);
- for(int i=0;i<q;i++){
- char c;
- cin>>c;
- if(c=='C'){
- int l,r,x;
- cin>>l>>r>>x;
- l--;
- r--;
- query[i]={x,{l,r}};
- a.push_back(x);
- }else{
- int id,x;
- cin>>id>>x;
- id--;
- query[i]={-1,{id,x}};
- a.push_back(x);
- }
- }
- sort(a.begin(), a.end());
- a.resize(unique(a.begin(), a.end())-a.begin());
- map<int,int> m;
- int k=1;
- for(int i:a)
- m[i]=k++;
- int sq=n;
- sq/=log2(k);
- sq=sqrt(sq);
- vector<Fenwick<long long> > ft((n+sq-1)/sq,Fenwick<long long>(k+1));
- for(int i=0;i<n;i++){
- int block=i/sq;
- ft[block].add(m[v[i]],1);
- }
- for(auto p:query){
- if(p.first>0){
- int l=p.second.first,r=p.second.second,x=p.first;
- long long ans=0;
- int x1=m[x];
- if(l/sq==r/sq){
- for(int i=l;i<=r;i++)
- ans+=(v[i]<=x);
- cout<<ans<<endl;
- continue;
- }
- int l1=((l+sq-1)/sq)*sq,r1=(r/sq)*sq;
- for(int i=l;i<l1;i++)
- ans+=(v[i]<=x);
- for(;l1<r1;l1+=sq)
- ans+=ft[l1/sq].sum(x1);
- for(int i=r1;i<=r;i++)
- ans+=(v[i]<=x);
- cout<<ans<<endl;
- }
- else{
- int i=p.second.first,x=p.second.second;
- int block=i/sq;
- ft[block].add(m[v[i]],-1);
- v[i]=x;
- ft[block].add(m[v[i]],1);
- }
- }
- }
Advertisement
Add Comment
Please, Sign In to add comment