hdu4970

//和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;
}







































你可能感兴趣的:(hdu4970)