zoukankan      html  css  js  c++  java
  • HDU 1166 敌兵布阵 线段树

      题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1166

      题目描述:中文题, 没啥说的, 更新+查询

      解题思路:最简单的线段树, 就是套板子的题, 单点更新, 线段树的坑才刚刚开, 没啥可讲的, 就是熟悉一下线段树的板子

      代码: 

    #include <cstdio>
    #define lson l, m, rt << 1
    #define rson m+1, r, rt << 1 | 1
    
    const int MAXN = 55555;
    int sum[MAXN<<2];
    
    void PushUp(int rt) {
        sum[rt] = sum[rt<<1] + sum[rt<<1|1];
    }
    void build(int l, int r, int rt) {
        if( l == r ) {
            scanf("%d", &sum[rt]);
            return;
        }
        int m = (l+r)>>1;
        build(lson);
        build(rson);
        PushUp(rt);
    }
    
    void update(int p, int add, int l, int r, int rt) {
        if(l == r) {
            sum[rt] += add;
            return;
        }
        int m = (l+r)>>1;
        if(p <= m) update(p, add, lson);
        else update(p, add, rson);
        PushUp(rt);
    }
    
    int query(int L, int R, int l, int r, int rt) {
        if(L <= l && r <= R) {
            return sum[rt];
        }
        int m = (l+r)>>1;
        int ret = 0;
        if( L <= m ) ret += query(L, R, lson);
        if( R > m ) ret += query(L, R, rson);
        return ret;
    }
    
    int main() {
        int T, n;
        scanf( "%d", &T );
        for( int cas = 1; cas <= T; cas++ ) {
            printf( "Case %d:\n", cas );
            scanf( "%d", &n );
            build( 1, n, 1 );
            char op[10];
            while( scanf( "%s", op ) ) {
                if( op[0] == 'E' ) break;
                int a, b;
                scanf( "%d%d", &a, &b );
                if( op[0] == 'Q' ) {
                    printf( "%d\n", query(a, b, 1, n, 1) );
                }
                else if( op[0] == 'S' ) update( a, -b, 1, n, 1 );
                else update(a, b, 1, n, 1);
            }
        }
        return 0;
    }
    View Code

      思考: 刚刚参加完了陕西西安的ACM邀请赛, 拿了铜牌, 但是我觉得真的很侥幸, 因为就是快手二题, 真的是水, 所以应该开新坑, 我现在就在开线段树的新坑, 同时我要复习dp,争取对更复杂的dp有一个更加深入的了解

  • 相关阅读:
    TreeView使用集锦
    net 下安装、调试的常见问题与错误及解决方法 [转]
    Oracle中使用同义词
    再推荐两个blog和一首好歌
    一点感慨
    推荐一个blog和一个工具
    买书了
    第一次做饭
    ORA00911错误及解决方法
    C#3.0美文收集
  • 原文地址:https://www.cnblogs.com/FriskyPuppy/p/6899400.html
Copyright © 2011-2022 走看看