codeforces#419 B q

題意:給你n個區間,然後給出m個查詢區間,對於每次詢問,輸出這個區間裏多少個點被不少於k個區間覆蓋

解析:求兩次前綴和就好了

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;

int a[300000];
int s[300000];
int p[300000];

int main(){
	int n, m, k;
	while(~scanf("%d%d%d", &n, &k, &m)){
		memset(a, 0, sizeof a);
		memset(s, 0, sizeof s);
		memset(p, 0, sizeof p);
		for(int i = 1; i <= n; i++){
			int l, r;
			scanf("%d%d", &l, &r);
			a[l]++;
			a[r + 1]--;
		}
		for(int i = 1; i <= 210001; i++){
			s[i] = s[i - 1] + a[i];
		}
		for(int i = 1; i <= 210001; i++){
			if(s[i] >= k) p[i] = p[i - 1] + 1;
			else p[i] = p[i - 1];
		}
		for(int i = 1; i <= m; i++){
			int l, r;
			scanf("%d%d", &l, &r);
			printf("%d\n", p[r] - p[l - 1]);
		}
	}
	return 0;
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章