#419 Div2 Problem B Karen and Coffee (统计区间重叠部分 && 前缀和)
2024-08-31 15:01:30
题目链接 :http://codeforces.com/contest/816/problem/B
题意 :给出 n 表示区间个数,限定值 k 以及问询次数 q,当一个数被大于或等于 k 个区间重复覆盖时才算有效数,每一次问询都是以区间方式给出,例如(L, R)问你在这个L~R的范围内有多少个数是有效数(即包含这些数的区间个数>=k)。
分析 : 这题可以预先统计哪些数被大于或者等于 k 个原始区间重复覆盖,只要提前将这些满足条件的数递增地编上权值构成前缀和序列,然后对于每段问询只要将前缀和序列做个减法即可,例如找到了 a1 a2 a3这三个数构是满足条件的,令sum[a1]=1,sum[a2]=2,sum[a3]=3,如果问询(a2,a3)这个区间满足条件的数,则只要将对应的权值做个减法即可,即sum[a3] - sum[a2-1]。关于如何统计有效的数,可以这样做,令arr数组存储的是区间信息,对于给出的 n 个区间 (L,R),只要将arr[L]++,arr[R+1]--(R+1相当于区间结束标识,这种技巧在POJ Matrix这题便有涉及),然后采用动态规划从前往后扫一遍和,当和>=k的时候那此时这个点便是满足条件的,给其加上权值构建前缀和序列。可能说的有点乱,看代码即知。
#include<bits/stdc++.h> using namespace std; ; int arr[maxn], sum[maxn], cnt[maxn]; int main(void) { int n, k, q; scanf("%d %d %d", &n, &k, &q); ; i<n; i++){ int L, R; scanf("%d %d", &L, &R); arr[L]++, arr[R+]--; } sum[] = arr[]; ; i<maxn; i++){ sum[i] = sum[i-] + arr[i];//记录从左到右扫出来的和,其实这个和就代表了区间的个数,由每个区间的左端点贡献 cnt[i] = cnt[i-] + (sum[i]>=k);//cnt为前缀和序列,如果当前的和>=k则对这个点在前缀和序列+1 } while(q--){ int L, R; scanf("%d %d", &L, &R); printf(]); } ; }
最新文章
- 【web前端面试题整理08】说说最近几次面试(水)
- TCP协议三次握手和四次挥手
- css3、html5学习笔记
- postgres中的中文分词zhparser
- kali linux 2.0安装sublime text 2
- HTTP协议 概述
- I2C串行总线标准驱动程序(C51)-万能程序
- Ansible11:变量详解【转】
- CSS3弹性伸缩布局(下)——flex布局
- Linux内核原理与分析-第一周作业
- 例:三位老师对某次数学竞赛进行了预测,他们的预测如下: 甲:学生A得了第一名,学生B得第三名。 乙:学生C得了第一名,学生D得第四名。 丙:学生D得了第二名,学生A得第三名。 结果表明,他们都说对了一半,说错了一半,并且无并列名次,输出A、B、C和D各自的名次。
- Python通过百度Ai识别图片中的文字
- Confluence 6 诊断
- 【最短路】道路重建 @upcexam5797
- Linux程序的执行
- java过滤器、监听器、拦截器机制
- JDK5.0 特性-线程 Condition
- Android——开机启动功能(Service和BroadcastReceiver)
- POP按钮动画
- UVa 11419 SAM I AM (最小覆盖数)
热门文章
- []转帖]linux 上修改了nginx.conf 怎么重新加载配置文件生效
- [转帖]PostgreSQL pg_dump&;psql 数据的备份与恢复
- 02: kubernetes安装
- php开发环境推荐使用
- 在docker容器中为elasticsearch配置跨域访问
- 关于导航自定义视图距离边界问题,点击状态栏TableView不能回滚到顶部问题
- Maven项目构建利器03——第一个Maven工程
- 微信小程序 setData动态设置数组中的数据
- pycharm使用已经配置好的virtualenv环境
- System.Windows.Forms.Application.DoEvents();