hdu 5248 序列变换

中文题意,略(但弱鸡的我还是把题目读错了,一直到读题解的时候才发现,弱鸡总会读错题目,我以为跑一下lis就行了,太天真)

但现在还是没有想到为什么会用二分(虽然大家都是这么说的,而且这是二分专题,emmm)

#include <set>
#include <map>
#include <queue>
#include <stack>
#include <math.h>
#include <vector>
#include <string>
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <iostream>
#include <algorithm>
#define zero(a) fabs(a)<eps
#define max( x, y )  ( ((x) > (y)) ? (x) : (y) )
#define min( x, y )  ( ((x) < (y)) ? (x) : (y) )
#define lowbit(x) (x&(-x))
#define debug(a) cerr<<#a<<"=="<<a<<endl
typedef long long ll;
const double pi=acos(-1.0);
const double eps=1e-8;
const int inf=0x3f3f3f3f;
const ll linf=0x3f3f3f3f3f3f3f3f;
const int maxn = 1e5;
using namespace std;

int a[maxn],b[maxn],n;

int check(int x)
{
//    bool ok=true;
    b[0]=a[0]-x;
    for(int i=1;i<n;i++){
        if(a[i]>b[i-1]){
            b[i]=max(b[i-1]+1,a[i]-x);
        }
        else{
            b[i]=min(b[i-1]+1,a[i]+x);
        }
        if(b[i]<=b[i-1])return false;
    }
    return true;
}

int main()
{
    int t;
    scanf("%d",&t);
    int cas=1;
    while(t--)
    {
        scanf("%d",&n);
        memset(a,0,sizeof(a));
        for(int i=0;i<n;i++){
            scanf("%d",&a[i]);
        }

        int l=0,r=inf;
        int mid,as;
        while(l<=r){
            mid=(l+r)>>1;
//            printf("test\n");
            if(check(mid)){
                r=mid-1;
                as=mid;
            }
            else{
                l=mid+1;
            }
        }
        printf("Case #%d:\n",cas++);
        printf("%d\n",as);
    }
    return 0;
}
/*
2
2
1 10
3
2 5 4
*/
时间: 2024-10-02 07:52:36

hdu 5248 序列变换的相关文章

hdu 5248 序列变换【二分】

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5248 分析:这道题是2015百度之星初赛1的3题 当时队友做的,后来也做了一下,可以用二分来做,另外还有一点小贪心, 因为题目数据范围不超过10^6,那么x=二分[0,10^6],使序列里的每一个数变化范围 值为x,求使序列变为升序的最小x值 另外贪心就是,我每一个数尽量X[i]变为X[i-1]+1,因为序列要升序,这样可以保证 对X[i+1]要求X[i+1]>X[i]的条件变得宽松, 献上代码:

hdu 5248 序列变换(二分枚举)

Problem Description 给定序列A={A1,A2,...,An}, 要求改变序列A中的某些元素,形成一个严格单调的序列B(严格单调的定义为:Bi<Bi+1,1≤i<N). 我们定义从序列A到序列B变换的代价为cost(A,B)=max(|Ai−Bi|)(1≤i≤N). 请求出满足条件的最小代价. 注意,每个元素在变换前后都是整数. Input 第一行为测试的组数T(1≤T≤10). 对于每一组: 第一行为序列A的长度N(1≤N≤105),第二行包含N个数,A1,A2,...,A

hdu 5256 序列变换 (LIS变形)

序列变换 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 519    Accepted Submission(s): 245 Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少个元素.

HDU ACM 5248 序列变换-&gt;二分代价+贪心

分析:二分代价,由于序列是单增的,我们使前面一个数相对取最小,这样后面的数变化的值也能相对较小(贪心). #include<iostream> using namespace std; #define N 100010 #define max(a,b) ((a)>(b)?(a):(b)) int num[N],tmp[N],n; bool valid(int cost) { int i; for(i=1;i<=n;i++) tmp[i]=num[i]; tmp[1]=tmp[1]-

hdu 5256 序列变换

最长上升子序列 nlogn;也是从别人的博客学来的 #include<iostream> #include<algorithm> #define maxn 100000+5 using namespace std; int n; int a[maxn]; int solve(int b[],int l) { int f[maxn];//f[i]表示子序列长度为i+1的序列中,末尾元素最小的元素的值 int k=0; f[k++]=b[0]; for(int i=1;i<l;i

hdu 5256 序列变换(LIS最长上升子序列)

Problem Description 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少个元素. Input 第一行输入一个T(1≤T≤10),表示有多少组数据 每一组数据: 第一行输入一个N(1≤N≤105),表示数列的长度 第二行输入N个数A1,A2,...,An. 每一个数列中的元素都是正整数而且不超过106. Output 对于每组数据,先输出一行 Case #i: 然后输出

序列变换 HDU - 5256

序列变换 HDU - 5256 题目链接 题目 我们有一个数列A1,A2...An,你现在要求修改数量最少的元素,使得这个数列严格递增.其中无论是修改前还是修改后,每个元素都必须是整数. 请输出最少需要修改多少个元素. input 第一行输入一个T(1≤T≤10),表示有多少组数据 每一组数据: 第一行输入一个N(1≤N≤105),表示数列的长度 第二行输入N个数A1,A2,...,An. 每一个数列中的元素都是正整数而且不超过106. output 对于每组数据,先输出一行 Case #i:

2015年百度之星初赛(1) --- C 序列变换

序列变换 Time Limit: 4000/2000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)Total Submission(s): 158    Accepted Submission(s): 83 Problem Description 给定序列$A = \{A_1, A_2,...,A_n\}$, 要求改变序列A中的某些元素,形成一个严格单调的序列B(严格单调的定义为:$B_i < B_{i+1}, 1 \

2015百度之星初赛1 序列变换

序列变换 Accepts: 720 Submissions: 3074 Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Problem Description 给定序列A={A1,A2,...,An}, 要求改变序列A中的某些元素,形成一个严格单调的序列B(严格单调的定义为:Bi<Bi+1,1≤i<N). 我们定义从序列A到序列B变换的代价为cost(A,B)=max(|Ai?Bi