zoukankan      html  css  js  c++  java
  • PKU 2828 Buy Tickets

    从后往前逐个添加,每次放到第pos[i]+1个空位置上;

    维护区间内空位置的个数,修改和查询都是二分查找。

     1 # include <stdio.h>
     2 
     3 # define ls ((r)<<1)
     4 # define rs ((r)<<1|1)
     5 # define mid (((x)+(y))>>1)
     6 
     7 # define MAXN 200010
     8 
     9 int p[MAXN], v[MAXN], a[MAXN];
    10 int sum[4 * MAXN];
    11 
    12 void build(int x, int y, int r)
    13 {
    14     sum[r] = y-x+1;
    15     if (x == y) return ;
    16     build(x, mid, ls);
    17     build(mid+1, y, rs);
    18 }
    19 
    20 void update(int r)
    21 {
    22     sum[r] = sum[ls] + sum[rs];
    23 }
    24 
    25 void change(int x, int y, int r, int pos)
    26 {
    27     if (x == y)
    28     {
    29         sum[r] = 0;
    30         return ;
    31     }
    32     if (pos <= mid) change(x, mid, ls, pos);
    33     else change(mid+1, y, rs, pos);
    34     update(r);
    35 }
    36 
    37 void query(int x, int y, int r, int cnt, int *t)
    38 {
    39     if (x == y)
    40     {
    41         *t = x;
    42         return ;
    43     }
    44     if (sum[ls] < cnt) query(mid+1, y, rs, cnt-sum[ls], t);
    45     else query(x, mid, ls, cnt, t);
    46 }
    47 
    48 int main()
    49 {
    50     int n, i, t;
    51         
    52     while (~scanf("%d", &n))
    53     {
    54         build(1, n, 1);
    55         for (i = 1; i <= n; ++i) {scanf("%d%d", &p[i], &v[i]); a[i] = -1;}
    56         for (i = n; i >= 1; --i)
    57         {
    58             query(1, n, 1, p[i]+1, &t);
    59             a[t] = v[i];
    60             change(1, n, 1, t);
    61         }
    62         printf("%d", a[1]);
    63         for (i = 2; i <= n; ++i) printf(" %d", a[i]);
    64         putchar('\n');
    65     }
    66     
    67     return 0;
    68 }
  • 相关阅读:
    clion打断点不生效
    PHP加密解密
    细说MySQL表操作
    细说MySQL数据库操作
    终端(命令行)连接MySQL
    MySQL结构
    求1!+(1!+3!)+(1!+3!+5!)+...+(1!+3!+5!+7!+9!)的值
    react 生命周期
    React TS 组件 Demo
    react-redux 实现原理
  • 原文地址:https://www.cnblogs.com/JMDWQ/p/2647583.html
Copyright © 2011-2022 走看看