洛谷10月月赛R1·浴谷八连测R1·提高组:SAC E#1 - 一道简单题 Sequence2
2017-10-15 17:05
393 查看
100 分建八棵树状数组。
维护前面的最大值。。
#include<cstdio> #include<iostream> #include<algorithm> using namespace std; int dp[5][100009],n; int a[5][100009],c[10][400009],t[400009],tot,ans,t1; void up(int k,int x,int v){ for(int i=x;i<=t1;i+=i&(-i)) c[k][i]=max(c[k][i],v); } int ask(int k,int x){ int s=0; for(int i=x;i>=1;i-=i&(-i)) s=max(c[k][i],s); return s; } int main(){ scanf("%d",&n); for(int i=1;i<=3;i++) for(int j=1;j<=n;j++) scanf("%d",&a[i][j]),t[++tot]=a[i][j]; sort(t+1,t+tot+1); t1=unique(t+1,t+tot+1)-(t+1); for(int i=1;i<=3;i++) for(int j=1;j<=n;j++) a[i][j]=lower_bound(t+1,t+t1+1,a[i][j])-t; for(int i=1;i<=n;i++) a[4][i]=a[3][i]; for(int i=1;i<=n;i++) { for(int k=1;k<=4;k++) { dp[1][i]=max(dp[1][i],ask(k,a[1][i])+1); if(k!=4) dp[3][i]=max(dp[3][i],ask(k,a[3][i])+1); } for(int k=5;k<=8;k++) { dea9 dp[2][i]=max(dp[2][i],ask(k,t1-a[2][i]+1)+1); if(k!=7) dp[4][i]=max(dp[4][i],ask(k,t1-a[4][i]+1)+1); } for(int j=1;j<=4;j++) { ans=max(ans,dp[j][i]); } for(int k=1;k<=4;k++) up(k,a[k][i],dp[k][i]);//printf("1"); for(int k=5;k<=8;k++) up(k,t1-a[k-4][i]+1,dp[k-4][i]); //for(int j=1;j<=4;j++)ans=max(dp[j][i],ans); } printf("%d",ans); }
相关文章推荐
- 洛谷10月月赛R1·浴谷八连测R1·提高组 SAC E#1 - T2一道简单题 Sequence2
- 洛谷10月月赛R1·浴谷八连测R1·提高组 SAC E#1 -T1 一道中档题 Factorial
- 洛谷10月月赛R1·浴谷八连测R1·提高组 SAC E#1 - 一道中档题 Factorial
- 洛谷10月月赛R1·浴谷八连测R1·提高组 一道中档题 Factorial
- 洛谷10月月赛R1-T2-一道简单题 Sequence2
- 洛谷10月月赛R1·浴谷八连测R1·提高组 T1
- 洛谷10月月赛R1·浴谷八连测R1·提高组 T2
- 洛谷10月月赛R1·浴谷八连测R1·提高组
- 洛谷10月月赛R1·浴谷八连测R1·提高组 T3
- 【洛谷10月月赛R1提高组】 SAC E#1 - 一道中档题 Factorial
- [洛谷10月月赛R1·普及组]T21 SAC E#1 - 一道难题 Tree
- <洛谷10月月赛R1·浴谷八连测R1·提高组·T1 3927 > 快速求1~n中的某一因子个数之和
- 洛谷10月月赛R1T1-SAC E#1 - 一道中档题 Factorial(pollard-rho质因数分解)
- 洛谷10月月赛R1-T1-一道中档题 Factorial
- 【Luogu】 P3928 SAC E#1 - 一道简单题 Sequence2
- P3928 SAC E#1 - 一道简单题 Sequence2
- 洛谷3928 一道简单题
- 【P3927】SAC E#1 - 一道中档题 Factorial(luogu八连刷R1提高组)
- 洛谷 P3927 SAC E#1 - 一道中档题 Factorial
- Java 编程:如何提高性能?(简单总结篇)