SCAUOJ——18100-奇怪的光照植物

来源:互联网 发布:mac可以玩qq堂吗 编辑:程序博客网 时间:2024/05/21 08:59

18100 奇怪的光照植物
时间限制:500MS  内存限制:65535K
Description
一种光照植物,用光照射一天就长1厘米。现在将这种植物种在一条直线型的
培养容器中,坐标从0到n-1,每一个整点位置种植一棵这种植物,即共n棵。
开始的时候所有植物的高度都为0。实验过程中,进行了m组,每组选择对范围为
[L,R]的植物进行光照a天,每组参数L、R、a由输入数据给出。
当所有实验结束后,我们想知道所有光照了奇数天的植物总的高度是多少(单位:厘米)。

输入格式
输入第一行包含一个整数T(T<=10),表示有T组测试数据。

对每一组测试数据,第一行是两个数n(1<=n<=10^6)和m(0<=m<=10^5),用空格分隔。
接下来的m行中每一行包含三个数L,R和a(0<=L<=R<=n-1,0<=a<=100),用空格分隔,表示一个操作。

输出格式
对于每组测试数据输出一行,所有实验操作后所有光照了奇数天的植物总的高度

输入样例
1
10 3
3 5 1
4 9 1
8 9 0


输出样例
5


提示
一维区间覆盖问题,快去百度吧

作者 admin


昨晚睡觉时来的思路,早睡每一天哈哈~

#include <iostream>#include <cstdio>#include <cmath>#include <cstring>#include <algorithm>#include <vector>using namespace std;#define mst( a ) memset( (a) ,0,sizeof( (a) ) )//#define localconst int maxn=1000005;int record[maxn];bool cmp(int a,int b){    return a>b;}int main(){#ifdef local    freopen("input.txt","r",stdin);#endif    int T;    scanf("%d",&T);    while(T--){        int n,m;        vector<int> loc;        mst(record);        scanf("%d%d",&n,&m);        for(int i=0;i<m;++i){            int l,r,a;            scanf("%d%d%d",&l,&r,&a);            record[l]+=a;            record[r+1]-=a;        }        long long int sum=0,tmp=0;        for(int i=0;i<n;++i){            tmp+=record[i];            if(tmp%2)sum+=tmp;        }        printf("%lld\n",sum);    }    return 0;}