排序枚举左端点,则右端点必定不降

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct Node{
int pos, val;
}nd[1000005];
int n, k, cnt[63], uu, vv=0, rig=0, re=0, ans=0x3f3f3f3f;
void rn(int &x){
x = 0;
char ch=getchar();
while(ch<'0' || ch>'9') ch = getchar();
while(ch>='0' && ch<='9'){
x = x * 10 + ch - '0';
ch = getchar();
}
}
bool cmp(Node x, Node y){
return x.pos<y.pos;
}
int main(){
rn(n); rn(k);
for(int i=1; i<=k; i++){
rn(uu);
for(int j=1; j<=uu; j++){
rn(nd[++vv].pos);
nd[vv].val = i;
}
}
sort(nd+1, nd+1+vv, cmp);
for(int i=1; i<=n; i++){
while(re<k && rig<n){
rig++;
if(++cnt[nd[rig].val]==1)
re++;
}
if(re==k)
ans = min(ans, nd[rig].pos-nd[i].pos);
if(--cnt[nd[i].val]==0) re--;
}
cout<<ans<<endl;
return 0;
}

当然也可以用滑动窗口的思想做,就是比较慢

#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
using namespace std;
struct Node{
int pos, val;
}nd[1000005];
int n, k, cnt[63], uu, vv=0, lev=1, rig=0, a[1000005];
void rn(int &x){
x = 0;
char ch=getchar();
while(ch<'0' || ch>'9') ch = getchar();
while(ch>='0' && ch<='9'){
x = x * 10 + ch - '0';
ch = getchar();
}
}
bool cmp(Node x, Node y){
return x.pos<y.pos;
}
bool check(int lim){
memset(cnt, 0, sizeof(cnt));
lev = 1, rig = 0;
int re=0;
for(int i=1; i<=n; i++){
while(lev<=rig && nd[a[lev]].pos<nd[i].pos-lim){
if(--cnt[nd[a[lev]].val]==0) re--;
lev++;
}
a[++rig] = i;
if(++cnt[nd[i].val]==1) re++;
if(re==k) return true;
}
return false;
}
int main(){
rn(n); rn(k);
for(int i=1; i<=k; i++){
rn(uu);
for(int j=1; j<=uu; j++){
rn(nd[++vv].pos);
nd[vv].val = i;
}
}
sort(nd+1, nd+1+vv, cmp);
int l=0, r=nd[vv].pos, mid, ans=0;
while(l<=r){
mid = (l + r) >> 1;
if(check(mid)){
ans = mid;
r = mid - 1;
}
else l = mid + 1;
}
cout<<ans<<endl;
return 0;
}

最新文章

  1. 第一章Android系统移植与驱动开发概述--读书笔记
  2. 怎样实现了捕获应用中的日志在android开发中
  3. 分布式消息系统:Kafka
  4. Linux vsftp配置本地用户
  5. 算法与数据结构之选择排序(C语言)
  6. dlib库使用
  7. Java基础之写文件——使用Formatter对象加载缓冲区(UsingAFormatter)
  8. listview某一项不可点击
  9. POJ 3422 Kaka's Matrix Travels (K取方格数:最大费用流)
  10. 从实验室搬到宿舍后可以上QQ但打不开网页
  11. 解决statusStrip控件上的项目不能靠右对齐的问题
  12. Big Clock
  13. QQ空间自动发广告解决方法
  14. ASP.NET 开发学习视频教程大全(共800集)
  15. W - Bitset(第二季水)
  16. php网站共享session方法(相同一级域名)
  17. Android的第二次增加SurfaceView基本使用
  18. windows全系列激活脚本-改良版.cmd
  19. jspf与jsp的区别
  20. 【转载】ASP.NET中Server.MapPath方法获取网站根目录总结

热门文章

  1. 构造方法,this,super,final,static
  2. JavaWeb_02_CSS学习
  3. DataSource--DBCP--C3P0--DBUtils
  4. MySQL表的碎片整理和空间回收小结
  5. python+selenium之数据库连接
  6. mysql-单表操作
  7. HDU 4283 You Are the One (区间DP,经典)
  8. 2017.10.7 QBXT 模拟赛
  9. 为什么我的C4C Service Request没办法Release到ERP?
  10. [numpy] 基础练习 (一)