题目
Time Limit:
1000 ms
Case Time Limit:1000 ms
Memory Limit:64 MB
Total Submission:108
Submission Accepted:50
Description
在ACM实验室里有n个草莓,编号依次为1到n,重量依次为w[1],w[2],...,w[n]。
由于某人比较喜欢蘸西瓜酱吃,在接下来的时间内,我会选择m个区间[l,r]并且随机选择一个数字k,使得标号在[l,r]区间内的每个草莓(包括端点)上面都加蘸了k重量的酱。
这时候会突然出现T个区间[L,R],对于每个区间,我们需要计算标号属于这个区间的草莓的重量和(包括上面的西瓜酱的重量,区间也包括端点)并输出。Input
题目包括多组输入
第一行输入3个数n,m,T,空格分开,1<=n<=1000,1<=m<=1000,1<=T<=1000
第二行输入n个数,空格分开,w[1],w[2],...,w[n],1<=w[i]<=100
接下来m行,每行有三个数,空格分开,分别为l,r,k,1<=l<=r<=n, 0<=k<=100
接下来T行,每行有两个数,空格分开,分别为L,R, 1<=L<=R<=nOutput
输出公有T行,每行一个数字表示标号属于区间[L,R]的草莓加酱的重量
Sample Input
4 1 2
1 2 3 4
1 2 1
1 2
2 4Sample Output
5
10Hint
注意数据范围
题解
直接强行模拟即可
代码
#include <cstdio> #include <algorithm> #include <cstring> #include <cmath> #include <string> #include <iostream> #include <vector> #include <list> #include <stack> using namespace std; #define REP(n) for(int o=0;o<n;o++) const int maxn = 1005; int w[maxn]; bool Do() { int n,m,T; if(scanf("%d%d%d",&n,&m,&T) == EOF) return false; REP(n) scanf("%d",&w[o+1]); REP(m) { int l,r,k; scanf("%d%d%d",&l,&r,&k); for(;l <= r;l++) w[l] += k; } REP(T) { int L,R; int ans=0; scanf("%d%d",&L,&R); for(;L <= R;L++) ans += w[L]; printf("%d\n",ans); } return true; } int main() { while(Do()); return 0; }