HDU 4970 Killing Monsters 树状数组
#include <bits/stdc++.h>
using namespace std;
#define N 100009
long long c[N],sum[N],n;
long long lowbit(long long x){
return (x&(-x));
}
void add(long long i,long long d){
while(i>=1){
c[i]+=d;
i-=lowbit(i);
}
}
long long getSum(long long x){
long long rnt=0;
for(long long i=x;i<=n;i+=lowbit(i)){
rnt+=c[i];
}
return rnt;
}
int main(){
long long m,l,r,d,i,h,x,count,k;
while(scanf("%lld",&n)){
if(n==0)
break;
memset(c,0,sizeof(c));
scanf("%lld",&m);
while(m--){
scanf("%lld %lld %lld",&l,&r,&d);
add(r,d);
add(l-1,-d);
}
sum[n+1]=0;
for(i=n;i>=1;i--){
sum[i]=sum[i+1]+getSum(i);
}
count=0;
scanf("%lld",&k);
while(k--){
scanf("%lld %lld",&h,&x);
if(h>=sum[x])
++count;
}
printf("%lld\n",count);
}
return 0;
}