Guest User

SHTARR

a guest
Oct 17th, 2017
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.82 KB | None | 0 0
  1. #include "bits/stdc++.h"
  2. using namespace std;
  3.  
  4. ofstream OUT ("C:\\Users\\Anushi Maheshwari\\Documents\\CodeChef\\Checker\\Wrong.txt");
  5. ifstream fin ("C:\\Users\\Anushi Maheshwari\\Documents\\CodeChef\\Test\\Test.out");
  6. ofstream fout ("Out");
  7.  
  8. #define N 1000010
  9. #define BS 1000
  10. #define NBS 1000
  11.  
  12. int n;
  13. int a[N];
  14. int l,r,x;
  15. int block[NBS+5][BS+5];
  16. int len[NBS+5];
  17. int kk[BS+5];
  18. int it,it2;
  19. bitset<NBS+5> lazy;
  20. int cnt;
  21.  
  22. void block_processor(int id){
  23.     cnt++;
  24.     lazy[id]=0,len[id]=0;
  25.  
  26.     int l=id*BS;
  27.     if(l>=n) return;
  28.     int r=max(n,l+BS);
  29.  
  30.     block[id][len[id]++]=a[l];
  31.     for(int i=l;i<r;i++){
  32.         if(a[i]>a[len[id]-1]){
  33.             block[id][len[id]++]=a[i];
  34.         }
  35.     }
  36. }
  37.  
  38. int start(){
  39.     int low=x;
  40.     int bid=(x/BS);
  41.     int high=max(n,(bid+1)*BS);
  42.     int sz=0;
  43.     for(int i=low;i<high;i++){
  44.         if(a[i]>=l){
  45.             //cout<<a[i]<<":"<<kk.size()<<" ";
  46.             l=a[i]+1;
  47.             kk[sz++]=a[i];
  48.             if(l>r) break;
  49.         }
  50.     }
  51.     //cout<<kk.size()<<endl;
  52.     return sz;
  53. }
  54.  
  55. int query(int id){
  56.     int sz=len[id];
  57.     if(sz==0 || block[id][sz-1]<=l || (l>r)) return 0;
  58.     if(block[id][sz-1]<=r && block[id][0]>=l) {l=block[id][sz-1]+1;return sz;}
  59.     it=lower_bound(block[id],block[id]+sz,r)-block[id];
  60.     it2=lower_bound(block[id],block[id]+sz,l)-block[id];
  61.     l=block[id][it]+1;
  62.     return it-it2+1;
  63. }
  64.  
  65. int main(){
  66. ios_base::sync_with_stdio(0);cin.tie(0);cout.tie(0);
  67.     clock_t sta=clock();
  68.     cnt=0;
  69.     int t,q,ans;
  70.     char ty;
  71.     fin>>t;
  72.     while(t--){
  73.         fin>>n>>q;
  74.         for(int i=0;i<n;i++) fin>>a[i];
  75.         for(int i=0;i<NBS;i++) block_processor(i);
  76.         while(q--){
  77.             fin>>ty>>x>>l;--x;
  78.             if(ty=='+'){
  79.                 a[x]+=l;
  80.                 block_processor((int)(x/BS));
  81.             }
  82.             else{
  83.                 fin>>r;
  84.                 ans=start();
  85.                 for(int i=int(x/BS)+1;i<1000;i++)
  86.                  ans+=query(i);
  87.                 OUT<<ans<<endl;
  88.             }
  89.         }
  90.     }
  91.     cout<<(double)((double)(clock()-sta)/CLOCKS_PER_SEC)<<" "<<cnt;
  92.     return 0;
  93. }
Add Comment
Please, Sign In to add comment