codeforces 816B

题目链接:

http://codeforces.com/problemset/problem/816/B

题解:

前缀和的经典应用

代码:

#include 
#include 
#include 
#include 
#include 
#include 
using namespace std;
#define met(a,b) memset(a,b,sizeof(a))
#define inf 0x3f3f3f3f
const int maxn = 2e5;
int num[maxn+10];
int cnt[maxn];

int main()
{
    int N,K,Q;
    met(num,0);
    met(cnt,0);
    scanf("%d%d%d",&N,&K,&Q);
    for(int i=0;iint left,right;
        scanf("%d%d",&left,&right);
        num[left]++;
        num[right+1]--;
    }
    for(int i=1;i<=maxn;i++)
    {
        num[i]+=num[i-1];
        if(num[i]>=K)
            cnt[i]++;
    }
    for(int i=1;i<=maxn;i++)
        cnt[i]+=cnt[i-1];
    while(Q--)
    {
        int a,b;
        scanf("%d%d",&a,&b);
        printf("%d\n",cnt[b]-cnt[a-1]);
    }
}

你可能感兴趣的:(ACM)