洛谷$P1712\ [NOI2016]$区间 线段树
时间:2019-09-16
本文章向大家介绍洛谷$P1712\ [NOI2016]$区间 线段树,主要包括洛谷$P1712\ [NOI2016]$区间 线段树使用实例、应用技巧、基本知识点总结和需要注意事项,具有一定的参考价值,需要的朋友可以参考一下。
正解:线段树
解题报告:
$umm$很久以前做的了来补个题解$QwQ$
考虑给每个区间按权值($r-l$从大往小排序,依次加入,然后考虑如果有一个位置被覆盖次数等于$m$了就可以把权值最大的那个删去直到被覆盖次数小于$m$,顺便更新答案
然后就做完辣!$QwQ$
放下代码趴,然后因为是去年的代码了所以码风可能有点丑,,,懒得改了$QwQ$
$over$
#include <iostream> #include <cstdio> #include <algorithm> using namespace std; int n,m,b[2000009],c[2000009],d[1000009],mx[4000009],add[4000009],l=1,r=0,ans=0x7fffffff,num; struct seg { int x,y,len; inline bool operator <(const seg& rhs) const { return len>rhs.len; } }a[500009]; inline int read() { char ch=getchar();int x=0; while(ch>'9' || ch<'0')ch=getchar(); while(ch<='9' && ch>='0')x=(x<<3)+(x<<1)+(ch^'0'),ch=getchar(); return x; } inline void ins(int l,int r,int x,int y,int k,int v) { if (x<=l&&y>=r) { add[k]+=v; mx[k]+=v; return; } int mid=l+r>>1; if (x<=mid) ins(l,mid,x,y,k<<1,v); if (y>mid) ins(mid+1,r,x,y,k<<1|1,v); mx[k]=max(mx[k<<1],mx[k<<1|1]); mx[k]+=add[k]; } int low(int x) { int l=1,r=num,mid; while (l<r) { mid=(l+r)>>1; if (b[mid]>=x) r=mid; else l=mid+1; } return l; } int main() { n=read(),m=read(); num=0; for (int i=1;i<=n;i++) { a[i].x=read(); a[i].y=read(); a[i].len=a[i].y-a[i].x; b[++num]=a[i].x; b[++num]=a[i].y; } sort(a+1,a+n+1); sort(b+1,b+num+1); for (int i=1;i<=n;i++) a[i].x=low(a[i].x),a[i].y=low(a[i].y); for (int r=1;r<=n;r++) { ins(1,num,a[r].x,a[r].y,1,1); while (mx[1]>=m) { ans=min(ans,a[l].len-a[r].len); ins(1,num,a[l].x,a[l].y,1,-1); l++; } } if (ans!=0x7fffffff) printf("%d\n",ans); else printf("-1"); return 0; }
原文地址:https://www.cnblogs.com/lqsukida/p/11526557.html
- 零基础学编程039:生成群文章目录(2)
- Android中的AutoCompleteTextView的使用
- 深度学习以及卷积基础
- Android 控件:使用下拉列表框--Spinner
- 层层升入:SQL极限调优之一次更新操作的N种优化可能
- 零基础学编程037:小数据分析
- 【干货】圣诞老人是否真实存在?训练Tensorflow的对象检测API能够告诉你答案
- 排序含有数字的字符串:一个巧妙地方法
- wpf 控件大小随窗体大小改变而改变
- 零基础学编程036:快速编写一个GUI程序
- WPF TreeView 选择事件执行两次,获取TreeView的父节点的解决方法
- 零基础学编程041:欧拉公式的几何意义
- 零基础学编程040:在Windows上安装Python库的正确姿势
- c++/c 获取cpp文件行号跟文件名
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- linux使用docker-compose部署软件配置详解
- 在Ubuntu中如何查看网络路由表详解
- linux中各种锁机制的使用与区别详解
- Linux环境下使用glog日志库的方法
- crontab执行时间与系统时间不一致问题解决
- Linux内核设备驱动之proc文件系统笔记整理
- CentOS7.6系统下使用yum配置lnmp环境的方法
- Linux内核设备驱动之高级字符设备驱动笔记整理
- Linux使用scp命令进行文件远程拷贝详解
- Linux内核设备驱动之Linux内核模块加载机制笔记整理
- linux无损扩容的方法
- Linux内核设备驱动之内核的时间管理笔记整理
- 使用squid搭建http和https的代理服务器设置指南
- linux中gdb的入门使用教程
- Linux命令中Ctrl+z、Ctrl+c和Ctrl+d的区别和使用详解