zoukankan      html  css  js  c++  java
  • POJ2182 Lost Cows

      原题链接:http://poj.org/problem?id=2182

      线段树。

      从后往前寻找,首先是找第a[n]大的数,找到后记录到答案数组里并删除改叶子节点,然后在剩下的数字中再找a[n - 1]大的数,直到n次寻找完成。

    View Code
     1 #include <stdio.h>
     2 #include <string.h>
     3 #define lson (cur << 1)
     4 #define rson (cur << 1 | 1)
     5 #define INF 0x3f3f3f3f
     6 #define N 8005
     7 
     8 int a[N], ans[N];
     9 
    10 struct node
    11 {
    12     int l, r;
    13     int len;
    14     int v;
    15 }tree[N << 2];
    16 
    17 void pushup(int cur)
    18 {
    19     tree[cur].len = tree[lson].len + tree[rson].len;
    20 }
    21 
    22 void query(int cur, int cnt, int loc)
    23 {
    24     if(tree[cur].l == tree[cur].r)
    25     {
    26         ans[loc] = tree[cur].v;
    27         tree[cur].len = 0;
    28         return ;
    29     }
    30     if(tree[lson].len >= cnt)
    31         query(lson, cnt, loc);
    32     else
    33         query(rson, cnt - tree[lson].len, loc);
    34     pushup(cur);
    35 }
    36 
    37 void build(int cur, int l, int r)
    38 {
    39     tree[cur].l = l, tree[cur].r = r;
    40     if(l == r)
    41     {
    42         tree[cur].v = l;
    43         tree[cur].len = 1;
    44         return ;
    45     }
    46     int mid = (l + r) >> 1;
    47     build(lson, l, mid);
    48     build(rson, mid + 1, r);
    49     pushup(cur);
    50 }
    51 
    52 int main()
    53 {
    54     int n, i;
    55     scanf("%d", &n);
    56     build(1, 1, n);
    57     a[1] = 1; 
    58     for(i = 2; i <= n; i ++)
    59     {
    60         scanf("%d", &a[i]);
    61         a[i] ++;
    62     }
    63     for(i = n; i >= 1; i --)
    64     {
    65         query(1, a[i], i);
    66     }
    67     for(i = 1; i <= n; i ++)
    68     {
    69         printf("%d\n", ans[i]);
    70     }
    71     return 0;
    72 }

      

  • 相关阅读:
    kubernetes安装
    kubernetes介绍
    Nginx——stream模块
    Nginx——文件路径配置
    Nginx——HTTP核心模块
    Nginx优化性能配置项
    Nginx----运行的配置项
    四十六、进程间通信——管道的分类与读写
    四十五、进程间通信——介绍
    四十四、Linux 线程——线程同步之死锁以及线程和信号
  • 原文地址:https://www.cnblogs.com/huangfeihome/p/2719511.html
Copyright © 2011-2022 走看看