UOJ#206. 【APIO2016】Gap
来源:互联网 发布:康麻子 知乎 编辑:程序博客网 时间:2024/06/06 08:37
题目描述
传送门
题解
人生第一道交互题!!!
子任务1:要求查询的次数不超过
每次查询得到数列的最小值和最大值,然后将询问的区间左右端点同是向内缩小1,继续查询,除了最后一次询问,剩下的询问每次可以得到两个数值,那么我们一定可以在
子任务2:定义 k 为调用 MinMax 时,区间
先花费
然后将
第一种情况:
第二种情况:存在区间中一个数也没有,那么答案一定会大于均分的区间长度,所有我们不关心每个区间中具体的数,只要考虑是区间最值的且相邻的数,然后更新答案,不要忘记统计最初最大值最小值的贡献,花费与询问的次数与第一种情况是一样的。
代码
#include "gap.h"#include<iostream>#include<cstdio>#include<cstring>#include<algorithm>using namespace std;const long long inf=1e18;long long findGap(int T,int N){ long long ans=0; if (T==1) { long long mn1,mx1; MinMax(0,inf,&mn1,&mx1); if (N==1) ans=0; int tmp=N-2; if (tmp==0) ans=max(ans,mx1-mn1); while (tmp>0) { long long mn,mx; if (mn1+1<=mx1-1) MinMax(mn1+1,mx1-1,&mn,&mx); else break; ans=max(ans,max(mn-mn1,mx1-mx)); if (tmp==2) ans=max(ans,mx-mn); if (mn==mx) tmp--; else tmp-=2; mn1=mn; mx1=mx; } return ans; } if (T==2) { long long l,r; MinMax(0,inf,&l,&r); if (N==2||N==1) return r-l; long long len=(r-l-1)/(N-2)+1; long long last=l; long long s=l+1,t; for (int i=1;i<=N-2;i++) { t=min(s+len-1,r-1); if (s>t) break; long long mn,mx; MinMax(s,t,&mn,&mx); if (mn!=-1) { ans=max(ans,mn-last); last=mx; } s=t+1; } ans=max(ans,r-last); return ans; }}
0 0
- UOJ#206. 【APIO2016】Gap
- UOJ 206 [APIO2016]Gap
- [UOJ#206][Apio2016]Gap(分块+数学相关)
- UOJ 205 [APIO2016]Fireworks
- [交互题] APIO2016 Gap
- 【APIO2016】uoj206 Gap
- [堆 折线] UOJ#205 & BZOJ4585 【APIO2016】Fireworks
- Gap
- GAP
- APIO2016游记
- APIO2016游记
- APIO2016总结
- Apio2016 游记
- APIO2016总结
- APIO2016 题解
- APIO2016滚粗记
- CTSC2016&&APIO2016爆零记
- ctsc&apio2016 总结
- Spring注解管理transaction
- NPM 中 --save 和 --save-dev的区别
- OpenCV特征点检测------Surf(特征点篇)
- ZOJ 3958 Cooking Competition 题解
- ssh登录慢怎么办
- UOJ#206. 【APIO2016】Gap
- 第十五届北京师范大学程序设计竞赛决赛(网络同步赛)
- zoj 3965 Binary Tree Restoring(* dfs)
- Ajax进阶----jQuery中的Ajax(下)
- Mike and gcd problem CodeForces
- UVA 11400 01背包
- C#145课的主要内容
- Android 帧动画
- 解决IDEA 中src下读取不到xml问题