国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 學院 > 開發設計 > 正文

hdu5248 序列變換 二分

2019-11-06 06:29:19
字體:
來源:轉載
供稿:網友

題目鏈接:

http://acm.hdu.edu.cn/showPRoblem.php?pid=5248

題意:

題解:

二分 從上一個位置到達這個位置,可以通過上一個位置推出當前位置必須到達的最小值now,如果now小于a[i]就無所謂了,因為肯定行,直接更新下一個now;如果now-a[i]大于了當前二分出的伸展極限就不行。

看了別人代碼,還是看了很久,還是太菜啊。。

代碼:

#include <bits/stdc++.h>using namespace std;typedef long long ll;#define MS(a) memset(a,0,sizeof(a))#define MP make_pair#define PB push_backconst int INF = 0x3f3f3f3f;const ll INFLL = 0x3f3f3f3f3f3f3f3fLL;inline ll read(){ ll x=0,f=1;char ch=getchar(); while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();} while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();} return x*f;}//////////////////////////////////////////////////////////////////////////const int maxn = 1e5+10;int n,a[maxn];bool check(int x){ int now=-INF; // 可能x很大,對于a[2]可以到的最小值a[1]-x+1可以變得很負 for(int i=1; i<=n; i++){ if(now-a[i]>x) return false; now = max(now+1,a[i]-x+1); // now表示當前值a[i]可以變到的最小的值+1之后就是a[i+1]的一個必須變到的值,a[i]-x+1也是,取他們的最大值就是a[i+1]必須要到達的最小值 如果a[i+1]>now,就一定可以,更新下一個now的時候,就是a[i+1]-x+1了。 } return true;}int main(){ int T = read(); for(int cas=1; cas<=T; cas++){ n = read(); for(int i=1; i<=n; i++){ a[i] = read(); } int ans = 0; int l = 0, r = 1e6; while(l <= r){ int mid = (l+r)/2; if(check(mid)) ans=mid,r=mid-1; else l=mid+1; } cout << "Case #" << cas << ":/n" << ans << endl; } return 0;}
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 汾阳市| 游戏| 梁山县| 岐山县| 西青区| 邵阳县| 东宁县| 辽阳市| 沙雅县| 镇赉县| 瑞昌市| 温州市| 华池县| 康保县| 富顺县| 那坡县| 峨眉山市| 休宁县| 防城港市| 桦川县| 上思县| 翼城县| 建阳市| 普定县| 屏东市| 望奎县| 正阳县| 兰考县| 新民市| 五台县| 汽车| 孟村| 高邮市| 澳门| 佛山市| 繁峙县| 永福县| 乐亭县| 乳源| 桑日县| 鄱阳县|