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

    (更新点查询区间)

    好吧,今天算是被这道题坑惨了,TLE了许久,结果发现原来就是用了一个cout的原因。。改成printf后一下就过了,而且时间一下缩短数倍。。俗话说,吃一堑,长一智,,我算是长记性了。。

    代码:

    #include <iostream>   
    #include <cstdio>   
    #include <cstring>   
    #include <cmath>   
    #include <algorithm>   
    #include <cstdlib>   
    
    using namespace std;    
    #define N 50011
    
    int tree[4*N];
    
    int a[N];
    
    void build(int l,int r,int rt)
    {
        if(l==r)
        {
            scanf("%d",&tree[rt]);
            return;
        }
        int mid = (l+r)/2;
        build(l,mid,2*rt);
        build(mid+1,r,2*rt+1);
        tree[rt] = tree[2*rt] + tree[2*rt+1];
    }
    
    void update(int l,int r,int pos,int val,int rt)
    {
        if(l==r)
        {
            tree[rt] += val;
            return;
        }
        int mid = (l+r)/2;
        if(pos<=mid)
            update(l,mid,pos,val,2*rt);
        else
            update(mid+1,r,pos,val,2*rt+1);
        tree[rt] = tree[2*rt] + tree[2*rt+1];
    }
    
    int query(int l,int r,int aa,int bb,int rt)
    {
        if(aa>r||bb<l)
            return 0;
        if(aa<=l&&bb>=r)
            return tree[rt];
        int mid = (l+r)/2;
        if(bb<=mid)
            return query(l,mid,aa,bb,2*rt);
        else if(aa>mid)
            return query(mid+1,r,aa,bb,2*rt+1);
        return query(l,mid,aa,bb,2*rt)+query(mid+1,r,aa,bb,2*rt+1);
    }
    
    int main()
    {
        int t,n,i;
        char ss[10];
        int aa,bb;
        scanf("%d",&t);
        int cs = 1;
        while(t--)
        {
            memset(tree,0,sizeof(tree));
            scanf("%d",&n);
            build(1,n,1);
            printf("Case %d:
    ",cs++);
            while(scanf("%s",ss)&&ss[0]!='E')
            {
                scanf("%d%d",&aa,&bb);
                if(ss[0] == 'A')
                    update(1,n,aa,bb,1);
                else if(ss[0] == 'S')
                    update(1,n,aa,-bb,1);
                else if(ss[0] == 'Q')
                {
                    int ans = query(1,n,aa,bb,1);
                    printf("%d
    ",ans);   //Don't use cout!
                }
            }
            
        }
        return 0;
    }
    View Code

    作者:whatbeg
    出处1:http://whatbeg.com/
    出处2:http://www.cnblogs.com/whatbeg/
    本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
    更多精彩文章抢先看?详见我的独立博客: whatbeg.com

  • 相关阅读:
    学习笔记(4)---JQuery
    学习笔记---ES6
    angular.js的学习笔记(1)
    vue.js学习笔记(1)
    HTML5“爱心鱼”游戏总结
    学习笔记(3)---综合
    学习笔记(2)---CSS中的易混淆点
    学习笔记(1)----水平垂直居中的方法
    javascript:void(0)是什么意思
    private Int32? m_shopid;
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3487328.html
Copyright © 2011-2022 走看看