设为首页 加入收藏

TOP

POJ - 2828 - Buy Tickets (线段树)
2015-11-21 01:02:24 来源: 作者: 【 】 浏览:1
Tags:POJ 2828 Buy Tickets 线段

?

题目传送:Buy Tickets

?

思路:线段树,从后往前依次插入,插入一个更新一次

?

AC代码:

?

#include 
  
   
#include 
   
     #include 
    
      #include 
     
       #include 
      
        #include 
       
         #include 
        
          #include 
         
           #include
           #include 
           
             #include 
            
              #include 
             
               #define LL long long #define INF 0x7fffffff using namespace std; const int maxn = 200005; struct node { int pos, v; }a[maxn]; int x[maxn << 2], num[maxn]; void build(int l, int r, int rt) { x[rt] = r - l + 1; if(r == l) return; int mid = (r + l) >> 1; build(l, mid, rt << 1); build(mid + 1, r, rt << 1 | 1); } int query(int p, int l, int r, int rt) { x[rt] --; if(l == r) return l; int mid = (l + r) >> 1; if(x[rt << 1] >= p) return query(p, l, mid, rt << 1); else return query(p - x[rt << 1], mid + 1, r, rt << 1 | 1); } int main() { int n; while(scanf("%d", &n) != EOF) { for(int i = 1; i <= n; i ++) { scanf("%d %d", &a[i].pos, &a[i].v); } build(1, n, 1); for(int i = n; i >= 1; i --) { int p = query(a[i].pos + 1, 1, n, 1); num[p] = a[i].v; } for(int i = 1; i < n; i ++) { printf("%d ", num[i]); } printf("%d\n", num[n]); } return 0; } 
             
            
           
         
        
       
      
     
    
   
  


?

?

?

?

?

】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇POJ 3723 Conscription 最小生成.. 下一篇leetcode 209 : Minimum Size Sub..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容: