题意:
输入M个炮台的攻击范围ab和攻击力c,N个怪物的血量d和坐标x。
所有怪物从x往n走,一个位置受一次攻击,求到n还活着的怪有几个。
题解:
标记攻击范围起始点a处c,终止点b处后一个-c;(遍历增加会超时!)
从1到n遍历一遍得到每个点会受到的攻击;
从n到1遍历一遍得到每个点到n所需的血量;
然后直接查询比较血量够不够。
#include<cstdio>
#include<cstring>
using namespace std;
int main()
{
int N,M,n,a,b,c,x;
unsigned long long d,s[100005];
while(scanf("%d",&n)&&n){
memset(s,0,sizeof(s));
scanf("%d",&M);
while(M--){
scanf("%d%d%d",&a,&b,&c);
s[a]+=c;
s[b+1]-=c;
}
for(int i=2;i<=n;i++)
s[i]+=s[i-1];
for(int i=n-1;i>0;i--)
s[i]+=s[i+1];
scanf("%d",&N);
int ans=0;
while(N--){
scanf("%lld%d",&d,&x);
if(d>s[x])ans++;
}
printf("%d\n",ans);
}
}