• 华东交通大学2015年ACM“双基”程序设计竞赛1005


    Problem E

    Time Limit : 3000/2000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other)
    Total Submission(s) : 357   Accepted Submission(s) : 16

    Font: Times New Roman | Verdana | Georgia

    Font Size: ← →

    Problem Description

    给定一个长度为n的数组 a[1],a[2],a[3],a[4].....a[n]。
    同时给定m个操作,每个操作有三个整形数据 x,y,z。
    每个操作的意义就是给数组中下标为x与下标为y之间(包括x,y)的元素的值加上z。

    Input

    输入有多组数据(3组左右)
    每一组数据第一行有两个整数 n,m 。(0<m<100000,0<n<1000000);
    第二行有n个整数,分别代表 a[1],a[2],a[3],a[4]......a[n]的初始值.(0<=a[i]<10)
    接下来就m行,每一行有3个整数,x,y,z。 (0<=x,y<=n, 0<z<10)
    (请大家特别注意本题的数据范围)

    Output

    在一行内输出这个序列的所有元素的值,并且每个值之间应该以空格隔开。
    (题目保证所有的输出数据都在int32范围内)

    Sample Input

    10 5
    0 0 0 0 0 0 0 0 0 0
    1 5 1
    2 6 1
    3 7 1
    4 9 1
    5 10 1
    1 1
    1
    1 1 2
    

    Sample Output

    1 2 3 4 5 4 3 2 2 1
    3

    Author

    moonlike
     
    没错!!!看似简单其实很坑,坑在a和b不一定是a<b的关系。知道这个,用线段树就好
    #include<stdio.h>
    //#include<bits/stdc++.h>
    #include<string.h>
    #include<iostream>
    #include<math.h>
    #include<sstream>
    #include<set>
    #include<queue>
    #include<map>
    #include<vector>
    #include<algorithm>
    #include<limits.h>
    #define inf 0x3fffffff
    #define INF 0x3f3f3f3f
    #define lson l,m,rt<<1
    #define rson m+1,r,rt<<1|1
    #define LL long long
    #define ULL unsigned long long
    using namespace std;
    const int maxn = 1000000;
    int add[maxn<<2];
    int sum[maxn<<2];
    int aa[1000000];
    void PushUp(int rt){
        sum[rt] = sum[rt<<1] + sum[rt<<1|1];
    }
    void PushDown(int rt,int m){
        if (add[rt]){
            add[rt<<1] += add[rt];
            add[rt<<1|1] += add[rt];
            sum[rt<<1] += add[rt] * (m - (m >> 1));
            sum[rt<<1|1] += add[rt] * (m >> 1);
            add[rt] = 0;
        }
    }
    void build(int l,int r,int rt){
        add[rt] = 0;
        if (l == r){
            sum[rt]=0;
            // scanf("%lld",&sum[rt]);
            return ;
        }
        int m = (l + r) >> 1;
        build(lson);
        build(rson);
        PushUp(rt);
    }
    void update(int L,int R,int c,int l,int r,int rt){
        if (L <= l && r <= R){
            add[rt] += c;
            sum[rt] += (LL)c * (r - l + 1);
            return ;
        }
        PushDown(rt , r - l + 1);
        int m = (l + r) >> 1;
        if (L <= m) update(L , R , c , lson);
        if (m < R) update(L , R , c , rson);
        PushUp(rt);
    }
    int query(int L,int R,int l,int r,int rt){
        if (L <= l && r <= R){
            return sum[rt];
        }
        PushDown(rt , r - l + 1);
        int m = (l + r) >> 1;
        int ret = 0;
        if (L <= m) ret += query(L , R , lson);
        if (m < R) ret += query(L , R , rson);
        return ret;
    }
    int main(){
        int N , M;
        int i,j;
        int a,b,c;
        while(~scanf("%d%d",&N,&M)){
            build(1 , N , 1);
            for(i=1; i<=N; i++){
                scanf("%d",&aa[i]);
            }
            for(i=1; i<=M; i++){
                scanf("%d%d%d",&a,&b,&c);
                if(a==0){
                    a+=1;
                }
                if(b==0){
                    b+=1;
                }
                update(min(a,b),max(b,a),c,1,N,1);
            }
            if(N==1){
                printf("%d
    ",aa[1]+query(1,1,1,N,1));
            }
            else{
                for(i=1; i<=N; i++){
                    if(i!=N){
                        printf("%d ",aa[i]+query(i,i,1,N,1));
                    }
                    else{
                        printf("%d
    ",aa[i]+query(i,i,1,N,1));
                    }
                }
            }
        }
        return 0;
    }
    

      

  • 相关阅读:
    WPF可视对象变换(RenderTransform)-----RotateTransform、TranslateTransform、ScaleTransform
    WPF 基本图形
    C#创建DataTable
    WPFの触发器详解
    WPF绑定のRelativeSource
    287. Find the Duplicate Number
    238. Product of Array Except Self
    127. Word Ladder
    674. Longest Continuous Increasing Subsequence
    621. Task Scheduler
  • 原文地址:https://www.cnblogs.com/yinghualuowu/p/5003110.html
Copyright © 2020-2023  润新知