套题整理 Orz DXY

Posted Radiumlrb

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了套题整理 Orz DXY相关的知识,希望对你有一定的参考价值。

弱弱的DXY

 

题目描述

DXY太弱了,以至于他已经不知道要如何解决调整一个数列的使得他变成一个严格上升序列。

输入格式

第 1 行,1 个整数 N

第 2 行,N 个整数 A1,A2,...,AN

输出格式

1 个整数,表示最少需要修改的多少个数字,使得数列变成单调上升的序列。

样例输入

3

1 3 2

样例输出

1

数据:

对于50%的数据:N<=1000

对于100%的数据:N<=100000

保证所有输入整数<=2^63-1


 由于数据比较弱所以可以直接写成最长上升子序列然后n-f[n]骗骗分(大雾)

正解的话是把位置i上的数字减去i,做不下降子序列就好了,不过普通dp会T要找nlogn的做法QAQ

代码:

 1 #include<iostream>
 2 #include<cstdio>
 3 #include<cstdlib>
 4 #include<cstring>
 5 #include<cmath>
 6 #include<algorithm>
 7 #define LiangJiaJun main
 8 #define INF 1999122700
 9 using namespace std;
10 int a[100004];
11 int unset[100004],n;
12 int cnt=0;
13 int erfen(int x){
14     int l=0,r=n,ans=0;
15     while(l<=r){
16         int mid = (l+r) >> 1;
17         if(unset[mid]>x)r=mid-1;
18         else{
19             ans = mid;
20             l = mid + 1;
21         }
22     }
23     return ans;
24 }
25 int LiangJiaJun(){
26     freopen("loser.in","r",stdin);freopen("loser.out","w",stdout);
27     scanf("%d",&n);
28     for(int i=1;i<=n;i++){
29         scanf("%d",&a[i]);
30         a[i]-=i;
31     }
32     for(int i=0;i<=n+1;i++)unset[i]=INF;
33     unset[1]=a[1];unset[0]=-INF;
34     for(int i=2;i<=n;i++){
35         int x=erfen(a[i])+1;
36         unset[x]=min(a[i],unset[x]);
37     }
38     for(int i=1;i<=n;i++)if(unset[i]!=INF)cnt=i;
39     cout<<n-cnt<<endl;
40     fclose(stdin);fclose(stdout);
41     return 0;
42 }

 hint:

不减i的话你看看这个数据1   2   3  2   2       2    2    4     5
减去i如果是不下降就说明那些在不下降序列上的数已经符合他们在数列中的位置,不需要修改了 

以上是关于套题整理 Orz DXY的主要内容,如果未能解决你的问题,请参考以下文章

IOS开发-OC学习-常用功能代码片段整理

初见《构建之法》orz……

VS2015 代码片段整理

小程序各种功能代码片段整理---持续更新

常用python日期日志获取内容循环的代码片段

乘法逆元...Orz