• <ins id="pjuwb"></ins>
    <blockquote id="pjuwb"><pre id="pjuwb"></pre></blockquote>
    <noscript id="pjuwb"></noscript>
          <sup id="pjuwb"><pre id="pjuwb"></pre></sup>
            <dd id="pjuwb"></dd>
            <abbr id="pjuwb"></abbr>

            a tutorial on computer science

              C++博客 :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
              21 隨筆 :: 0 文章 :: 17 評論 :: 0 Trackbacks
            #include <cstdio>
            #include <vector>
            #include <algorithm>
            #include <cstring>
            const int maxn =  210000+20;
            const int INF = 1<<29;
            using namespace std;
            int N;
            struct Node
            {
              char op[6];
              int x,y,pos;
            };
            vector<Node> hh;
            int rmost[maxn*8],cnt[maxn*8],hpos[maxn*8];
            bool operator< (const Node& a,const Node& b)
            {
              if(a.x != b.x) return a.x < b.x;
              return a.y < b.y;
            }
            bool operator== (const Node& a,const Node& b)
            {
              if(a.x == b.x&&a.y==b.y) return true;
              return false;
            }
            void add(int pos,int ll,int rr,int idx)
            {
               if(ll == rr)
               {
                 rmost[idx] = hh[pos].y;
                 cnt[idx]++;
                 hpos[idx] = pos;
                 return; 
               }
               int mid = (ll+rr)/2;
               if(pos <= mid)
                 add(pos,ll,mid,idx*2);
               else
                 add(pos,mid+1,rr,idx*2+1);
             
               cnt[idx] = cnt[idx*2] + cnt[idx*2+1];
               rmost[idx] = max(rmost[idx*2],rmost[idx*2+1]);
            }
            void del(int pos,int ll,int rr,int idx)
            {
              if(ll == rr)
              {
                cnt[idx]--;
                if(cnt[idx] == 0)
                  rmost[idx] = -1;
                return;
              }
               int mid = (ll+rr)/2;
               if(pos <= mid)
                 del(pos,ll,mid,idx*2);
               else
                 del(pos,mid+1,rr,idx*2+1);
              
              cnt[idx]--;
              rmost[idx] = max(rmost[idx*2],rmost[idx*2+1]);
            }
            int query(int l,int ll,int rr,int y,int idx)//l和r之間的第一個比y大的
            {
              if(ll == rr)
              {
                if(cnt[idx] > 0 && rmost[idx] > y)
                  return hpos[idx];
                return -1; 
              }  
             int mid = (ll+rr)/2;
             int nret = -1;
             if(l<=mid && rmost[idx*2] > y) nret = query(l,ll,mid,y,idx*2);
             if(nret == -1 && rmost[idx*2+1] > y) nret = query(l,mid+1,rr,y,idx*2+1);
             return nret;
            }
            int main()
            {
               int i,j;
               int casenum = 1;
               while(scanf("%d",&N)!=EOF && N)
              {
              hh.clear();
                if(casenum != 1) printf("\n");
                printf("Case %d:\n",casenum++);
                hh.clear();
                memset(cnt,0,sizeof(cnt));
                memset(rmost,0,sizeof(rmost));
                vector<Node> vec;
                Node tmp;
                for(i=0;i<N;i++)
                {
                  scanf("%s%d%d",tmp.op,&tmp.x,&tmp.y);
                  vec.push_back(tmp);
                  hh.push_back(tmp);
                }
                sort(hh.begin(),hh.end());
                hh.erase(unique(hh.begin(),hh.end()),hh.end());
                for(i=0;i<N;i++)
                {
                  vec[i].pos = lower_bound(hh.begin(),hh.end(),vec[i]) - hh.begin();
                }
               for(i=0;i<N;i++)
               {
                 if(vec[i].op[0] == 'a')
               add(vec[i].pos,0,hh.size()-1,1);
                 else if(vec[i].op[0] == 'r') 
               del(vec[i].pos,0,hh.size()-1,1);
                 else
                 {
                  for(j=vec[i].pos;j<hh.size();j++)
                    if(hh[j].x > vec[i].x)
                      break;
                   if(j == hh.size()) 
                   {
                    printf("-1\n");
                    continue;
                   }
                   int num = query(j,0,hh.size()-1,vec[i].y,1);
                   if(num == -1) printf("-1\n");
                   else
                      printf("%d %d\n",hh[num].x,hh[num].y);
                 }
               }
              }
              return 0;
            }
            posted on 2012-07-26 12:14 bigrabbit 閱讀(192) 評論(0)  編輯 收藏 引用
            国内精品久久久久久99| 久久强奷乱码老熟女网站| 2021国内精品久久久久久影院| 国产巨作麻豆欧美亚洲综合久久 | 四虎国产精品免费久久| 久久99国产精品久久99小说| 久久亚洲精品国产精品| 国产三级精品久久| 少妇无套内谢久久久久| 国产精品久久午夜夜伦鲁鲁| 精品久久国产一区二区三区香蕉| 精品多毛少妇人妻AV免费久久 | a高清免费毛片久久| 中文成人久久久久影院免费观看| 人妻丰满AV无码久久不卡| 91久久精品电影| 99久久精品国内| 久久无码一区二区三区少妇| 色综合久久最新中文字幕| 国产精品免费福利久久| 无码8090精品久久一区| 91久久精一区二区三区大全| 久久婷婷五月综合色奶水99啪| 69久久夜色精品国产69| 99精品国产99久久久久久97 | 亚洲午夜久久久久久噜噜噜| 91精品观看91久久久久久| 亚洲欧美成人综合久久久| 一本色道久久综合狠狠躁| 久久国产精品偷99| 99久久99这里只有免费费精品| 久久综合给合综合久久| 国产精品热久久无码av| 久久精品国产69国产精品亚洲| 国产美女久久久| 久久久久亚洲精品天堂| 国产精品久久久久国产A级| 亚洲精品美女久久久久99| 国产69精品久久久久APP下载 | 99精品久久久久久久婷婷| 国产99久久久国产精品小说|