博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
bzoj1293 [SCOI2009]生日礼物
阅读量:5283 次
发布时间:2019-06-14

本文共 1341 字,大约阅读时间需要 4 分钟。

单调队列优化

枚举起点找出每一种颜色在这个位置之后的第一个位置与这个位置距离的最大值。

再找出每一个起点结果的最小值。

1 #include
2 #include
3 #include
4 #include
5 using namespace std; 6 const int inf=2147483647; 7 int n,k,sum,ans=inf,head[65],next[1000005],v[1000005],a[1000005]; 8 inline int getint() 9 {10 int f=1,ret=0;11 char ch=getchar();12 while(ch<'0'||ch>'9'){
if(ch=='-')f=-1;ch=getchar();}13 while(ch>='0'&&ch<='9')ret*=10,ret+=ch-'0',ch=getchar();14 return f==-1?-ret:ret;15 }16 bool js(int x)17 {18 int mx=0;19 for(int i=1;i<=k;i++)20 {21 while(v[head[i]]>x)22 {23 if(!next[head[i]])return 0;24 head[i]=next[head[i]];25 }26 if(v[head[i]]<=x)mx=max(mx,x-v[head[i]]);27 }28 ans=min(ans,mx);29 return 1;30 }31 int main()32 {33 n=getint();k=getint();34 for(int i=1;i<=k;i++)35 {36 int x=getint();37 for(int j=1;j<=x;j++)38 {39 int y=getint();40 v[++sum]=y,next[sum]=head[i],head[i]=sum,a[sum]=y;41 }42 }43 sort(a+1,a+sum+1);44 for(int i=sum;i>0;i--)45 {46 if(a[i]!=a[i+1])47 if(!js(a[i]))break;48 }49 printf("%d",ans);50 return 0;51 }

 

转载于:https://www.cnblogs.com/HugeGun/p/5151177.html

你可能感兴趣的文章
深入理解类成员函数的调用规则(理解成员函数的内存为什么不会反映在sizeof运算符上、类的静态绑定与动态绑定、虚函数表)...
查看>>
div最低高度设置
查看>>
Chrome浏览器正常,IE下界面却乱了
查看>>
关于不断刷新界面jsp+ajax
查看>>
课程总结
查看>>
js高阶函数应用—函数防抖和节流
查看>>
eclipse 中java/scala 混合的maven项目 工作环境篇
查看>>
顺序栈与两栈共享空间-C语言实现
查看>>
【mongo】可以用localhost启动,无法用ip启动问题的解决
查看>>
【QT】视频播放
查看>>
揭开Redis的神秘面纱
查看>>
Object流
查看>>
转 10 个 Nginx 的安全提示
查看>>
Windows Phone开发(8):关于导航的小技巧 转:http://blog.csdn.net/tcjiaan/article/details/7285062...
查看>>
字符串类型 字符串下标 字符串的方法 切片 for循环的一些总结
查看>>
Ajax学习笔记1之第一个Ajax应用程序
查看>>
css3新单位vw、vh、vmin、vmax的使用详解(转载)
查看>>
软件测试培训第30天
查看>>
创建守护进程步骤与setsid()
查看>>
[iOS]Win8下iTunes无法连接iPhone版本的解决方法
查看>>