华东交通大学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\n",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\n",aa[i]+query(i,i,1,N,1));
                }
            }
        }
    }
    return 0;
}

  

时间: 2024-12-22 23:14:21

华东交通大学2015年ACM“双基”程序设计竞赛1005的相关文章

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

Problem D Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 945   Accepted Submission(s) : 121 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 阿黄的银行最近有发行了一种新面额的钞票面值为4,所

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

Problem B Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 698   Accepted Submission(s) : 342 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 阿黄是一个小气的银行家,他有了一个银行,出版了4种

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

Problem C Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 225   Accepted Submission(s) : 20 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description <炉石传说:魔兽英雄传>(Hearthstone:

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

Problem A Time Limit : 3000/1000ms (Java/Other)   Memory Limit : 65535/32768K (Java/Other) Total Submission(s) : 745   Accepted Submission(s) : 89 Font: Times New Roman | Verdana | Georgia Font Size: ← → Problem Description 给定两个三角形,判断两个三角形是否相似.注意6个点的

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

Problem Description 假设你有一个矩阵,有这样的运算A^(n+1) = A^(n)*A (*代表矩阵乘法)现在已知一个n*n矩阵A,S = A+A^2+A^3+...+A^k,输出S,因为每一个元素太大了,输出的每个元素模10 Input 先输入一个T(T<=10),每组一个n,k(1<=n<=30, k<=1000000) Output 输出一个矩阵,每个元素模10(行末尾没有多余空格) Sample Input 1 3 2 0 2 0 0 0 2 0 0 0

华东交通大学2017年ACM“双基”程序设计竞赛 1003

Problem Description 有两个球在长度为L的直线跑道上运动,两端为墙.0时刻小球a以1m/s的速度从起点向终点运动,t时刻小球b以相同的速度从终点向起点运动.问T时刻两球的距离.这里小球与小球.小球与墙的碰撞均为弹性碰撞,所有过程没有能量损失. Input 先输入一个q,代表q组数据,然后每组3个整数 L,t,T.1<=L<=1000;0<=t<=1000;t<=T<=1000; Output 一个整数,代表答案. Sample Input 2 10 4

华东交通大学2018年ACM“双基”程序设计竞赛 C. 公式题 (2) (矩阵快速幂)

题目链接:公式题 (2) 比赛链接:华东交通大学2018年ACM"双基"程序设计竞赛 题目描述 令f(n)=2f(n-1)+3f(n-2)+n,f(1)=1,f(2)=2 令g(n)=g(n-1)+f(n)+n*n,g(1)=2 告诉你n,输出g(n)的结果,结果对1e9+7取模 输入描述: 多组输入,每行一个整数n(1<=n<=1e9),如果输入为0,停止程序. 输出描述: 在一行中输出对应g(n)的值,结果对1e9+7取模. 示例1 输入 1 5 9 456 0 输出

华东交通大学2016年ACM“双基”程序设计竞赛 1010

Problem Description LB是个十分喜欢钻研的人,对什么事都要搞明白.有一天他学习到了阶乘,他十分喜欢,所以他在想一个问题.如果给定一个数n,求n!能不能被2016整除.LB算了好久都没有算出来,所以他向你求助,你能不能帮他解决这个问题呢? Input 第一行只包含一个整数T(T≤1000),表示测试用例的个数.对于每个测试用例,第一行只包含一个整数N(0≤N≤10000),N如描述所示. Output 对于每个测试用例,输出一行,如果N!能被2016整除输出"YES"

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

大吉大利今晚吃鸡 Problem Description 最近流行吃鸡,那就直接输出一行"Winner winner ,chicken dinner!"(没有双引号)模板代码:#include <stdio.h>int main(){printf("hello world\n");return 0;} Input 没有输入 Output 输出一行"Winner winner ,chicken dinner!"注意要换行 Sample