CF816B Karen and Coffee

本文介绍了一种类似区间修改点查询的树状数组实现方法。通过输入区间[l, r]来增加或减少该区间的值,并统计大于等于k的区间的数量。最后,程序实现了查询指定区间内符合条件的元素个数。

思路:

有点类似于区间修改点查询的树状数组。

实现:

 1 #include <iostream>
 2 #include <cstdio>
 3 using namespace std;
 4 
 5 const int MAXN = 200005;
 6 int a[MAXN], n, k, q;
 7 
 8 int main()
 9 {
10         cin >> n >> k >> q;
11         for (int i = 0; i < n; i++)
12         {
13                 int l, r;
14                 scanf("%d %d", &l, &r);
15                 a[l]++; a[r + 1]--;
16         }
17         for (int i = 1; i < MAXN; i++) a[i] += a[i - 1];
18         for (int i = 1; i < MAXN; i++)
19                 if (a[i] >= k) a[i] = 1;
20                 else a[i] = 0;
21         for (int i = 1; i < MAXN; i++) a[i] += a[i - 1];
22         for (int i = 0; i < q; i++)
23         {
24                 int l, r;
25                 scanf("%d %d", &l, &r);
26                 printf("%d\n", a[r] - a[l - 1]);
27         }
28         return 0;
29 }

 

转载于:https://www.cnblogs.com/wangyiming/p/7077366.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值