hdu5248-シリーズ変換
質問の意味:
あなたのシーケンスAを与えるために、それが増加厳密に単調性を確保するために、列の新しい番号、行とBの数B形、シーケンスAに特定の要素の順序を変更する必要があり、最小コストが得られます。
コスト計算式の$コスト(A、B)= MAX(| a_iを- B_i |)$。
ソリューション:
石とその質問にホップと同様、答えは範囲の半分に縮小され、その後、すべての貪欲に最小を取ります。
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define LL long long
#define N 100010
int ans,cnt = 1;
int a[N],n,T,tmp;
inline bool check(int x) {
int pre = a[1] - x;
for(int i = 2 ; i <= n ; i++) {
if(a[i] + x <= pre) return 0;
pre = max(pre + 1, a[i] - x);
}
return 1;
}
int main() {
scanf("%d",&T);
while(T--) {
scanf("%d",&n);
tmp = 0;
for(int i = 1 ; i <= n ; i++) {
scanf("%d",&a[i]);
if(tmp < a[i]) tmp = a[i];
}
int l = 0, r = 0x3f3f3f, ans;
while(l <= r) {
int mid = (l + r) >> 1;
if(check(mid)) {
r = mid - 1;
ans = mid;
} else l = mid + 1;
}
printf("Case #%d:\n%d\n",cnt++,ans);
}
//system("pause");
return 0;
}