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

    http://poj.org/problem?id=2182

    线段树,单点更新,单点查询

    #include <stdio.h>
    
    #define lson l, m, root<<1
    #define rson m+1, r, root<<1|1
    
    #define N 80008
    
    int sum[N<<2];
    
    void push_up(int root)
    {
        sum[root] = sum[root<<1] + sum[root<<1|1];
    }
    
    void build(int l, int r, int root)
    {
        int m;
        if(l == r)
        {
            sum[root] = 1;
            return;
        }
        m = (l + r) >> 1;
        build(lson);
        build(rson);
        push_up(root);
    }
    
    void update(int x, int l, int r, int root)
    {
        int m;
        if(l == r)
        {
            sum[root] = 0;
            return;
        }
        m = (l + r) >> 1;
        if(x <= m)
        {
            update(x, lson);
        }
        if(m+1 <= x)
        {
            update(x, rson);
        }
        push_up(root);
    }
    
    int query(int x, int l, int r, int root)
    {
        int m;
        if(l == r)
        {
            return l;
        }
        m = (l + r) >> 1;
        if(sum[root<<1] >= x)
        {
            return query(x, lson);
        }
        return query(x-sum[root<<1], rson);
    }
    
    int main()
    {
        int n, i, a[N], b[N];
        scanf("%d", &n);
        build(1, n, 1);
        for(i=2; i<=n; i++)
        {
            scanf("%d", a+i);
        }
        for(i=n; i>=2; i--)
        {
            b[i] = query(a[i]+1, 1, n, 1);
            update(b[i], 1, n, 1);
        }
        b[1] = query(1, 1, n, 1);
        for(i=1; i<=n; i++)
        {
            printf("%d\n", b[i]);
        }
        return 0;
    }
  • 相关阅读:
    小学期实践2
    小学期实践小组心得
    小学期实践1
    《构建之法》8
    《构建之法》7
    《构建之法》6
    《构建之法》5
    《构建之法》4
    《构建之法》3
    lintcode
  • 原文地址:https://www.cnblogs.com/yuan1991/p/pku2182.html
Copyright © 2011-2022 走看看