hdu4970 Killing Monsters

来源:互联网 发布:js页面加载完成后跳转 编辑:程序博客网 时间:2024/05/17 19:14

题目难点:给定区间值,如何给每个点赋值。这题用前缀和来解决比较好,朴素算法会超时。

#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int n,m,k;long long a[100005];long long hp;int pos;int main(){    int i,j,l,r,d;    //freopen("d:\\test.txt","r",stdin);    while(scanf("%d",&n)&&n)    {        scanf("%d",&m);        int ans=0;        memset(a,0,sizeof(a));        for(i=0; i<m; i++)        {            scanf("%d%d%d",&l,&r,&d);            a[l]+=d;            a[r+1]-=d;        }        //求每个点的伤害值        for(i=1;i<=n;i++)        {            a[i]+=a[i-1];        }        //求从1到i的的伤害值        for(i=1;i<=n;i++)        {            a[i]+=a[i-1];        }        scanf("%d",&k);        for(i=0; i<k; i++)        {            scanf("%I64d%d",&hp,&pos);            if(a[n]-a[pos-1]<hp) ans++;        }        cout<<ans<<endl;    }    return 0;}


0 0
原创粉丝点击