题目

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<=n

Output

输出公有T行,每行一个数字表示标号属于区间[L,R]的草莓加酱的重量

Sample Input

4 1 2
1 2 3 4
1 2 1
1 2
2 4

Sample Output

5
10

Hint

注意数据范围

题解

直接强行模拟即可

代码

#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;
}