Wavio Sequence UVA - 10534 LIS

xiaoxiao2021-02-27  287

体悟:

其实根据提示   nlogn   大概知道是用LIS,,但是我还是打算标记序号之后排个序,,,然后发现对于反向的递减的LIS 难弄。。

然后看题解;

原来是求反向的LIS,,,

然后枚举每一个dp[I],  这样就能确保枚举的是中心点。。

还是没有想到啊。。

#include<bits/stdc++.h> using namespace std; #define mem(a,b) memset(a,b,sizeof(a)); #define sf scanf #define pf printf #define bug1 printf("bug1\n"); #define N 10005 #define M 55 #define LL long long #define inf 0x3f3f3f3f int n ; int d[N]; int a[N],b[N]; int dp1[N]; int dp2[N]; void LIS(int *a,int *dp){ int g[N]; mem(g,inf); for(int i=1;i<=n;++i){ int k=lower_bound(g+1,g+1+n,a[i])-g; dp[i]=k; g[k]=a[i]; } } int main(){ while(~sf("%d",&n)){ for(int i=1;i<=n;++i){ sf("%d",&a[i]); b[n-i+1]=a[i]; } LIS(a,dp1); LIS(b,dp2); int ans=0,maxx=-1; for(int i=1;i<=n;++i){ ans=min(dp1[i],dp2[n-i+1])*2-1; maxx=max(maxx,ans); } pf("%d\n",maxx); } }

转载请注明原文地址: https://www.6miu.com/read-4430.html

最新回复(0)