Advertisement
Guest User

Untitled

a guest
Feb 25th, 2018
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 1.67 KB | None | 0 0
  1. #include<bits/stdc++.h>
  2. #define NMAX 100001
  3. #define ll long long
  4. using namespace std;
  5. int n,m,mas[NMAX];
  6. int ans;
  7. struct Node {
  8.     Node *l,*r;
  9.     int left,right,sum,mid;
  10.     Node (int val,int loft,int roght){
  11.         left=loft;
  12.         right=roght;
  13.         mid=(loft+roght)/2;
  14.         sum=val;
  15.         l=NULL;
  16.         r=NULL;
  17.     }
  18.     Node (int n){
  19.         right=n;
  20.         left=1;
  21.         sum=n;
  22.         mid=(right+left)>>1;
  23.         l=NULL;
  24.         r=NULL;
  25.    
  26.     }
  27. };
  28. void update (Node *v,int pos){
  29.     if (v->right==v->left){
  30.         v->sum=0;
  31.         return ;
  32.     }
  33.     if (!(v->l)) v->l=new Node (v->mid-v->left+1,v->left,v->mid);
  34.     if (!(v->r)) v->r=new Node (v->right-v->mid,v->mid+1,v->right);
  35.            
  36.     if (pos<=v->mid){
  37.         update (v->l,pos);
  38.     }
  39.     else{
  40.         update (v->r,pos);
  41.     }
  42.     v->sum=v->l->sum+v->r->sum;
  43. }
  44. ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
  45. int f (Node *v,int pos){
  46.     if (v->right==v->left){
  47.         return v->left;
  48.     }
  49.    
  50.     if (!(v->l)) v->l=new Node (v->mid-v->left+1,v->left,v->mid);
  51.     if (!(v->r)) v->r=new Node (v->right-v->mid,v->mid+1,v->right);
  52.            
  53.     if (pos<=v->l->sum){
  54.         return f (v->l,pos);
  55.     }
  56.     else{
  57.         return f (v->r,pos-v->l->sum);
  58.     }
  59. }
  60. int main () {
  61.     int t;
  62.     cin>>n>>t;
  63.     Node *root= new Node(n);
  64.     //build
  65.     //
  66.    
  67.    
  68.     while (t--){
  69.         char c;
  70.         int a;
  71.         cin>>c>>a;
  72.         if (c=='D'){
  73.             update (root,f(root,a));
  74.         }
  75.         else{
  76.             cout<<f(root,a)<<endl;
  77.         }
  78.     }
  79.  
  80.     return 0;
  81. }
  82. /*
  83.   _   _   _          _
  84.  | \ | | (_)        | |
  85.  |  \| |  _    ___  | | __  ___    ___    _ __     __ _
  86.  | . ` | | |  / __| | |/ / / __|  / _ \  | '_ \   / _` |
  87.  | |\  | | | | (__  |   <  \__ \ | (_) | | | | | | (_| |
  88.  |_| \_| |_|  \___| |_|\_\ |___/  \___/  |_| |_|  \__,_|
  89.  
  90.  
  91. */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement