• Hdu 1166


    hdu1166-敌兵布阵

    题意:

    读入一个数组,完成单点加,单点减,和区间求和三种操作。

    解法:

    明摆着的一颗线段树,SB题。

    CODE:

    #pragma GCC optimize(2)
    #include<iostream>
    #include<cstdio>
    #include<cstring>
    #include<algorithm>
    
    using namespace std;
    
    #define LL long long
    #define N 100010
    
    struct Tree {
        int lson,rson;
        int sum,tag;
    }tree[N * 2];
    
    int n,cnt = 1,a[N],ans,T,test;
    char s[N];
    
    inline int read(){
        int x = 0,f = 1;
        char ch = getchar();
        while(ch<'0'||ch>'9') {if(ch == '-') f = -1; ch = getchar();}
        while(ch>='0'&&ch<='9') {x = (x << 1) + (x << 3) + (ch ^ 48);ch = getchar();}
        return x * f;
    }
    inline void pushup(int x) {
        tree[x].sum = tree[tree[x].lson].sum + tree[tree[x].rson].sum;
    }
    inline void pushdown(int x,int l,int r) {
        int mid = (l + r) >> 1;
        tree[tree[x].lson].sum += (mid - l + 1) * tree[x].tag;
        tree[tree[x].lson].tag += tree[x].tag;
        tree[tree[x].rson].sum += (r - mid) * tree[x].tag;
        tree[tree[x].rson].tag += tree[x].tag;
        tree[x].tag = 0;
    }
    void build(int x,int l,int r) {
        if(l == r) {
            tree[x].sum = a[l];
            return;
        }
        int mid = (l + r) >> 1;
        tree[x].lson = ++cnt;
        build(tree[x].lson,l,mid);
        tree[x].rson = ++cnt;
        build(tree[x].rson,mid+1,r);
        pushup(x);
    }
    void update(int x,int l,int r,int k,int v) {
        if(l == r) {
            tree[x].sum += v;
            return;
        }
        int mid = (l + r) >> 1;
        if(k <= mid) update(tree[x].lson,l,mid,k,v);
        else update(tree[x].rson,mid+1,r,k,v);
        pushup(x);
    }
    int query(int x,int l,int r,int ll,int rr) {
        if(l == ll && r == rr) return tree[x].sum;
        int mid = (l + r) >> 1;
        pushdown(x,l,r);
        if(rr <= mid) return query(tree[x].lson,l,mid,ll,rr);
        else if(ll > mid) return query(tree[x].rson,mid+1,r,ll,rr);
        else return query(tree[x].lson,l,mid,ll,mid) + query(tree[x].rson,mid+1,r,mid+1,rr);
    }
    
    int main() {
        T = read();
        while(T--) {
            test++;
            n = read();
            for(int i = 1 ; i <= n ; i++)
                a[i] = read();
            build(1,1,n);
            printf("Case %d:
    ",test);
            while(true) {
                scanf("%s",s+1);
                if(s[1] == 'E') break;
                if(s[1] == 'A') {
                    int i = read() , j = read();
                    update(1,1,n,i,j);
                }
                if(s[1] == 'S') {
                    int i = read() , j = read();
                    update(1,1,n,i,-j);
                }
                if(s[1] == 'Q') {
                    int i = read() , j = read();
                    printf("%d
    ",query(1,1,n,i,j));
                }
            }
        }
        //system("pause");
        return 0;
    }
    
  • 相关阅读:
    K近邻 Python实现 机器学习实战(Machine Learning in Action)
    sklearn-SVC实现与类参数
    从核函数到SVM原理--sklearn-SVM实现
    基于scikit-learn包实现机器学习之KNN(K近邻)-完整示例
    java集合框架
    面向对象第一周心得体会
    java面试总结
    Aaa
    测试
    在Java中执行Tomcat中startup.bat
  • 原文地址:https://www.cnblogs.com/Repulser/p/11396819.html
Copyright © 2020-2023  润新知