//和hdu1556差不多,不过hdu1556时间是3s , 可以用线段树过
//开一个n的数组a[n],对于每一个tower变换l , r , d
//a[l]+=d , a[r+1]-=d;
//从1到n扫一遍,a[i] += a[i-1]
//那么a[i]里存的·就是第i个位置受到的伤害
#include<cstdio>
#include<iostream>
#include<cstring>
using namespace std ;
const int maxn = 100010 ;
typedef __int64 ll ;
ll a[maxn] ;
int main()
{
int n ;
while(~scanf("%d" ,&n) &&n)
{
memset(a , 0 , sizeof(a)) ;
int m ;
scanf("%d" ,&m) ;
int l , r ;
ll d ;
while(m--)
{
scanf("%d%d%I64d" ,&l , &r , &d) ;
a[l] += d ;
a[r+1] -= d;
}
for(int i = 2;i <= n;i++)
a[i] += a[i-1] ;
for(int i = n-1;i > 0;i--)
a[i] += a[i+1] ;
int k ;
int ans = 0 ;
scanf("%d" ,&k) ;
while(k--)
{
ll h ; int x ;
scanf("%I64d%d" ,&h , &x) ;
if(a[x] < h)
ans++ ;
}
printf("%d\n" ,ans) ;
}
return 0;
}
时间: 2024-10-27 07:28:47