Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<bits/stdc++.h>
- #define NMAX 100001
- #define ll long long
- using namespace std;
- int n,m,mas[NMAX];
- int ans;
- struct Node {
- Node *l,*r;
- int left,right,sum,mid;
- Node (int val,int loft,int roght){
- left=loft;
- right=roght;
- mid=(loft+roght)/2;
- sum=val;
- l=NULL;
- r=NULL;
- }
- Node (int n){
- right=n;
- left=1;
- sum=n;
- mid=(right+left)>>1;
- l=NULL;
- r=NULL;
- }
- };
- void update (Node *v,int pos){
- if (v->right==v->left){
- v->sum=0;
- return ;
- }
- if (!(v->l)) v->l=new Node (v->mid-v->left+1,v->left,v->mid);
- if (!(v->r)) v->r=new Node (v->right-v->mid,v->mid+1,v->right);
- if (pos<=v->mid){
- update (v->l,pos);
- }
- else{
- update (v->r,pos);
- }
- v->sum=v->l->sum+v->r->sum;
- }
- ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
- int f (Node *v,int pos){
- if (v->right==v->left){
- return v->left;
- }
- if (!(v->l)) v->l=new Node (v->mid-v->left+1,v->left,v->mid);
- if (!(v->r)) v->r=new Node (v->right-v->mid,v->mid+1,v->right);
- if (pos<=v->l->sum){
- return f (v->l,pos);
- }
- else{
- return f (v->r,pos-v->l->sum);
- }
- }
- int main () {
- int t;
- cin>>n>>t;
- Node *root= new Node(n);
- //build
- //
- while (t--){
- char c;
- int a;
- cin>>c>>a;
- if (c=='D'){
- update (root,f(root,a));
- }
- else{
- cout<<f(root,a)<<endl;
- }
- }
- return 0;
- }
- /*
- _ _ _ _
- | \ | | (_) | |
- | \| | _ ___ | | __ ___ ___ _ __ __ _
- | . ` | | | / __| | |/ / / __| / _ \ | '_ \ / _` |
- | |\ | | | | (__ | < \__ \ | (_) | | | | | | (_| |
- |_| \_| |_| \___| |_|\_\ |___/ \___/ |_| |_| \__,_|
- */
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement