Approximating a Constant Range CodeForces - 602B dp or 队列
2017-08-10 11:02
246 查看
想了很久想不出怎么用 尺取法做。。
看了别人的dp,好好啊。
http://blog.csdn.net/gungnir0711/article/details/50280247
也看到有用单调队列+尺取法的
,
也可以用队列做吧。。
学了下师兄弟的 st+ 二分
题意:给定一个由n个元素组成的序列a[],保证相邻元素之间差的绝对值不超过1。问你最长的T序列。
看了别人的dp,好好啊。
http://blog.csdn.net/gungnir0711/article/details/50280247
也看到有用单调队列+尺取法的
,
也可以用队列做吧。。
int main() { int n; scanf("%d",&n); int ans=0; for( int i=1; i<=n; i++ ) { int x; scanf( "%d",&x ); if( dp[x-1]>dp[x+1] ) ans=max( ans,i-max( dp[x-2],dp[x+1] ) ); else ans=max( ans, i-max(dp[x+2],dp[x-1] ) ); dp[x]=i; } printf( "%d\n",ans ); return 0; }
学了下师兄弟的 st+ 二分
int a[mxn]; int mini[mxn][20],maxi[mxn][20]; int n; int mm[mxn]; void initmin(int n){ mm[0]=-1; for(int i=1;i<=n;++i){ mini[i][0]=a[i]; mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1]; } int k=mm ; for(int j=1;j<=k;++j) for(int i=1;i+( 1<<j)-1<=n;++i) mini[i][j]=min(mini[i][j-1],mini[i+(1<<(j-1))][j-1]); } int getmin(int x,int y){ int k=mm[y-x+1]; return min(mini[x][k],mini[y-(1<<k)+1][k]); } void initmax(int n){ mm[0]=-1; for(int i=1;i<=n;++i){ maxi[i][0]=a[i]; mm[i]=((i&(i-1))==0)?mm[i-1]+1:mm[i-1]; } int k=mm ; for(int j=1;j<=k;++j) for(int i=1;i+(1<<j)-1<=n;++i) maxi[i][j]=max(maxi[i][j-1],maxi[i+(1<<(j-1))][j-1]); } int getmax(int x,int y){ int k=mm[y-x+1]; return max(maxi[x][k],maxi[y-(1<<k)+1][k]); } bool judge(int len){ for(int i=1;i+len-1<=n;++i){ if(getmax(i,i+len-1)<=getmin(i,i+len-1)+1)return true; } return false; } int main(){ sf("%d",&n); rep(i,1,n)sf("%d",&a[i]); initmin(n); initmax(n); int lb=1,ub=n+1; int mid; while(ub-lb>1){ mid=(lb+ub)>>1; if(judge(mid))lb=mid; else ub=mid; } pf("%d\n",lb); }
相关文章推荐
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
- 【Codeforces Round 333 (Div 2)B】【贪心 多指针】Approximating a Constant Range 给定数组 相邻元素波动为1 求差值不超1的最长序连续子序列
- CodeForces 602B_Approximating a Constant Range_DP
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range
- 【32.22%】【codeforces 602B】Approximating a Constant Range
- CF-Approximating a Constant Range
- CodeForces 602 B.Approximating a Constant Range(尺取+set)
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range (线段树区间最值)
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range (dp)
- Codeforces 602B - Approximating a Constant Range
- 602B - Approximating a Constant Range (STL 贪心)
- CF#333(Div2)B. Approximating a Constant Range(RMQ)
- CF-Approximating a Constant Range
- 【CodeForces 602B】G - 一般水的题2-Approximating a Constant Range
- Codeforces Round #333 (Div. 2)B. Approximating a Constant Range(ST+二分||set暴力)
- 【CodeForces 602C】H - Approximating a Constant Range(dijk)
- CF Round#333 Div2 B. Approximating a Constant Range
- [CodeForces 602B]Approximating a Constant Range[构造]
- CodeForces 602 B.Approximating a Constant Range(尺取+set)
- Codeforces Round #333 (Div. 2) B. Approximating a Constant Range