[JZOJ 5861] 失意
2024-09-04 01:48:48
思路:
求交集最大老套路,排序之后用堆维护即可。
#include <bits/stdc++.h>
using namespace std;
const int mod = 1e9+7;
const int maxn = 1000010;
inline int read() {
int q=0,f=1;char ch = getchar();
while(!isdigit(ch)){
if(ch=='-')f=-1;ch=getchar();
}
while(isdigit(ch)){
q=q*10+ch-'0';ch=getchar();
}
return q*f;
}
struct lne {
int l,r,id;
bool operator < (lne x) const{
return r > x.r;
}
}l[maxn];
int ans;
int n,m;
priority_queue<lne> q;
bitset<maxn>vis,p;
int siz;
inline bool cmp(lne a,lne b) {
return (a.l == b.l) ? (a.r > b.r) : (a.l < b.l);
}
int main () {
freopen("failure.in","r",stdin);
freopen("failure.out","w",stdout);
read();
n = read(),m = read();
for(int i = 1;i <= n; ++i) {
l[i].l = read();
l[i].r = read();
l[i].id = i;
}
sort(l + 1,l + n + 1,cmp);
for(int i = 1;i <= m; ++i) {
q.push(l[i]);
++siz;
vis[l[i].id] = 1;
}
lne top = q.top();
ans = max(top.r - l[m].l,0);
p = vis;
for(int i = m + 1;i <= n; ++i) {
q.push(l[i]);
++siz;
vis[l[i].id] = 1;
if(siz > m) {
top = q.top();
vis[top.id] = 0;
q.pop();
siz--;
}
if(siz == m) {
top = q.top();
int len = max(top.r - l[i].l,0);
if(len >= ans) {
ans = len;
p = vis;
}
}
}
printf("%d\n",ans);
for(int i = 1;i <= n; ++i) {
if(p[i]) {
printf("%d ",i);
}
}
return 0;
}
最新文章
- hdu 4946 2014 Multi-University Training Contest 8
- 在Mac中像Windows一样查看Tomcat控制台信息
- Chrome 35个开发者工具的小技巧
- k-nearest-neighbor算法
- js里的匿名函数 数组排序
- 【T-SQL系列】临时表、表变量
- printf, fprintf, sprintf, snprintf, vprintf, vfprintf, vsprintf, vsnprintf - 输出格式转换函数
- D - Constructing Roads - 2421
- .net 加密错误:填充无效,无法移除
- 对于windows窗口的标题菜单栏的操作——删除/禁用 最小最大话和关闭
- 微信超时5s,调用客服接口异步回复消息(PHP)
- ArcGIS Pro 简明教程(4)工具和模型构建器
- angular6、7 兼容ie9、10、11
- Hadoop记录-Hive调优:让任务并行执行
- 用java连接RabbitMQ
- C/C++指针参数赋值问题
- Android如何实现TCP和UDP传输
- 登录XML
- vsftpd日志配置及查看——可以将vsftpd记录在系统日志里
- python web框架 Django 登录页面