当前位置: 首页 > news >正文

1400*B. Karen and Coffee

Examples

input

3 2 4
91 94
92 97
97 99
92 94
93 97
95 96
90 100

output

3
3
0
4

input

2 1 1
1 1
200000 200000
90 100

output

0

 解析:

        题意为,给你多个区间(会有重叠),每个区间的每个值都会为这个值累加 1。再给一些查询区间,问这个区间有多少个数满足,其累加值大于k。

        数据量2e5,为O(NlogN)的复杂度。

        两重遍历肯定超时,所以要把单次查询的复杂度降低为 logN,所以可以树状数组。

        开始差分记录每个点的累加值,遍历将大于累加值大于等于 k,的点放入树状数组,然后每次查询直接 logN 获取查询区间的满足题意的个数。

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=2e5+5;
int n,k,q,a[N],c[N],x,y,p[N];
int lowbit(int x){return x&-x;
}
void add(int x){for(int i=x;i<=2e5;i+=lowbit(i)) p[i]+=1;
}
int sum(int x,int k){int ans=0;for(int i=y;i;i-=lowbit(i)) ans+=p[i];for(int i=x-1;i;i-=lowbit(i)) ans-=p[i];return ans;
}
int main(){scanf("%d%d%d",&n,&k,&q);for(int i=1;i<=n;i++){scanf("%d%d",&x,&y);c[x]+=1;	//差分统计每个区间的增加 c[y+1]-=1;}for(int i=1;i<=2e5;i++){a[i]=a[i-1]+c[i];if(a[i]>=k) add(i);		//如果某个点的累计数大于 k,则加入树状数组 }while(q--){scanf("%d%d",&x,&y);printf("%d\n",sum(x,y));	//查询 }return 0;
}
http://www.lryc.cn/news/99058.html

相关文章:

  • 【业务功能篇54】Springboot项目常用工具类:HTTP状态码/客户端request
  • Fine Logic
  • Neo4j图数据基本操作
  • 前端JavaScript面试100问(中)
  • Docker 安全及日志管理与https部署
  • 2.3 HLSL常用函数
  • 互联网的发展
  • STM32 CAN通讯实验程序
  • Python代码片段之Django静态文件URL的配置
  • 基于飞桨paddle的极简方案构建手写数字识别模型测试代码
  • soft ip与hard ip
  • MyBatisPlus从入门到精通-2
  • AI面试官:Asp.Net 中使用Log4Net (一)
  • Selenium自动化元素定位方式与浏览器测试脚本
  • 人机交互与人机混合智能的区别
  • 【项目】轻量级HTTP服务器
  • sketch如何在线打开?有没有什么软件可以辅助
  • CSS Flex 笔记
  • Markdown常用标签及其用途-有示例
  • 25.1 Knife4j-Swagger的增强插件
  • 用flask run代替flask run --debug
  • python_day14_综合案例
  • 【算法题】2779. 数组的最大美丽值
  • 文件上传之PHP
  • 人脸检测实战-insightface
  • Linux工具【1】(编辑器vim、编译器gcc与g++)
  • 基于Java+SpringBoot+vue前后端分离古典舞在线交流平台设计实现
  • MQ - 闲聊MQ一二事儿 (Kafka、RocketMQ 、Pulsar )
  • Qt中的 QIODevice类(包含:随机访问、顺序访问设备)
  • 【JavaScript 07】函数声明 地位平等 函数提升 属性方法 作用域 参数 arguments对象 闭包 IIFE立即调用函数表达式 eval命令