【HPU OJ 1310 】序列的区间操作 【思维】

题目描述
给你[1, N]共N个数,和Q次操作,每次操作将区间[x, y]里面的数全加v。

要求你按顺序输出Q次操作后这N个数。

输入
有多组测试数据,请处理到文件结束。

每组数据给定两个整数N和Q,接下来有Q行,表示Q次操作。每行有三个整数x、y、v。

后台数据保证均满足 1 <= N, Q <= 10^7 且 1 <= x <= y <= 10^7,1 <= v <= 10^7。

输出
每组数据输出N个整数,每两个整数之间有一个空格,最后一个数后面没有空格。

由于最后的数可能比较大,你只需要输出% 666666的结果。

样例输入
1 1
1 1 3
2 2
1 1 3
2 2 1
样例输出
4
4 3
来源

代码

#include<bits/stdc++.h>
using namespace std ;
typedef long long LL ;

const int MAXN = 1e7+10 ;
const int MAXM = 1e5 ;
const LL mod  = 666666;

inline int read(){
    int f=1,x=0;char ch=getchar();
    while(ch<'0'||ch>'9')   { if(ch=='-') f=-1;ch=getchar();}
    while(ch>='0'&&ch<='9') { x=x*10+ch-'0'; ch=getchar();}
    return f*x;
}
inline void out(int a) {   
    if (a < 0)  { putchar('-');  a = -a; }  
    if (a >= 10)   out(a / 10);  
    putchar(a % 10 + '0');  
}  

int vis[MAXN], sum[MAXN];
int main(){
    int n, q;
    while(~scanf("%d%d",&n,&q)) {
        memset(vis,0,sizeof(vis));
        int a, b, c;
        while(q--){
             a=read();b=read();c=read();
            vis[a] += c;
            vis[b+1] -= c; 
        }
        sum[0] = 0;
        for(int i = 1;i <= n; i++) {
            sum[i] = (sum[i-1] + vis[i]+1);
            vis[i] = sum[i] % mod;
        }
        for(int i = 1;i <= n; i++) {
            out(vis[i]);putchar(' ');
        }
        puts("");
    }
return 0;
}
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值