码迷,mamicode.com
首页 > 其他好文 > 详细

Codeforces Round #419 B

时间:2017-06-28 23:05:35      阅读:132      评论:0      收藏:0      [点我收藏+]

标签:print   区间   ems   span   style   tor   时间段   .com   scan   

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

标签:print   区间   ems   span   style   tor   时间段   .com   scan   

原文地址:http://www.cnblogs.com/max88888888/p/7091862.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!