• <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 閱讀(195) 評論(0)  編輯 收藏 引用
            久久精品一区二区影院 | 国内精品久久久久影院老司| 国产成人综合久久精品尤物| 香蕉aa三级久久毛片| 免费精品国产日韩热久久| www.久久精品| 人妻少妇精品久久| 久久综合久久综合久久| 久久成人小视频| 91精品婷婷国产综合久久| 7777精品久久久大香线蕉| 精品无码久久久久久久动漫| 狠狠色狠狠色综合久久| 热re99久久6国产精品免费| 色婷婷噜噜久久国产精品12p| 一级女性全黄久久生活片免费 | 国产成人精品久久免费动漫| 久久天天躁狠狠躁夜夜av浪潮 | 久久久久这里只有精品| 久久久精品一区二区三区| 精品久久久中文字幕人妻| 理论片午午伦夜理片久久| 99久久精品国产一区二区三区| 日韩人妻无码精品久久久不卡| 亚洲精品无码久久久久AV麻豆| 久久www免费人成精品香蕉| 久久精品黄AA片一区二区三区| 久久人做人爽一区二区三区 | 久久夜色精品国产亚洲| 东京热TOKYO综合久久精品| 婷婷五月深深久久精品| 亚洲国产精品无码久久98| 久久国产亚洲精品| 久久最新精品国产| 一本久久久久久久| 久久国产福利免费| 久久涩综合| 狠狠色丁香久久婷婷综合| 亚洲国产精品无码久久一线| 久久人爽人人爽人人片AV | 女人香蕉久久**毛片精品|