Codeforces Round #419 B

Posted %%%%%

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Codeforces Round #419 B相关的知识,希望对你有一定的参考价值。

B. Karen and Coffee

题意:输入第一行是n k q 分别表示有n个时间段 q个询问,每次询问给出l r 询问l r 时间内 有几个时间点在给出的时间段中出现不小于k次

思路:n个时间段用扫描线处理,询问就是问 l  r区间内有几个时间点在扫描线中的厚度不小于k,求2次前缀和就可以了

AC代码:

#include "iostream"
#include "string.h"
#include "stack"
#include "queue"
#include "string"
#include "vector"
#include "set"
#include "map"
#include "algorithm"
#include "stdio.h"
#include "math.h"
#define bug(x) cout<<x<<" "<<"UUUUU"<<endl;
#define mem(a) memset(a,0,sizeof(a))
using namespace std;
const int N=2e5+100;
int n,k,q,l,r,a,b;
int f[N],sum[N];
int main(){
    scanf("%d%d%d",&n,&k,&q);
    for(int i=1; i<=n; ++i){
        scanf("%d%d",&l,&r);
        f[l]++,f[r+1]--;
    }
    for(int i=2; i<N; ++i){
        f[i]=f[i]+f[i-1];
    }
    if(f[1]>=k) sum[1]++;
    for(int i=2; i<N; ++i){
        if(f[i]>=k){
            sum[i]=sum[i-1]+1;
        }
        else sum[i]=sum[i-1];
    }
    for(int i=1; i<=q; ++i){
        scanf("%d%d",&a,&b);
        printf("%d\n",sum[b]-sum[a-1]);
    }
    return 0;
}

 

以上是关于Codeforces Round #419 B的主要内容,如果未能解决你的问题,请参考以下文章

Codeforces Round #419

Codeforces Round #419 (Div. 2)

Codeforces Round #419 C

Codeforces Round #419 (Div. 1) (ABCDE)

Codeforces Round #419 (Div. 2) A-E

Codeforces Round #419 (Div. 2)C. Karen and Game