QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#71566 | #3236. Hills And Valleys | chenshi# | AC ✓ | 143ms | 19616kb | C++ | 1.2kb | 2023-01-11 11:59:40 | 2023-01-11 11:59:42 |
Judging History
answer
#include<cstdio>
#include<iostream>
using namespace std;
const int o=1e5+10;
int T,n,a[o],ans,L,R,f[o][10],h[o][10],g[o][10],p[o][10];char s[o];
int main(){
for(scanf("%d",&T);T--;printf("%d %d %d\n",ans,L,R)){
scanf("%d%s",&n,s+1);ans=0;L=R=1;
for(int i=1;i<=n;++i) a[i]=s[i]-48;
for(int i=0;i<=n+1;++i) for(int j=0;j<10;++j) f[i][j]=g[i][j]=h[i][j]=0;
for(int i=1;i<=n;++i){
for(int j=0;j<10;++j) f[i][j]=f[i-1][j];
for(int j=a[i];j+1;--j) f[i][a[i]]=max(f[i][a[i]],f[i-1][j]+1);
}
for(int i=n;i;--i){
for(int j=0;j<10;++j) h[i][j]=h[i+1][j];
for(int j=a[i];j<10;++j) h[i][a[i]]=max(h[i][a[i]],h[i+1][j]+1);
}
for(int i=0;i<10;++i) ans=max(ans,f[n][i]);
for(int l=0;l<10;++l) for(int r=l+1;r<10;++r){
for(int i=1;i<=n;++i){
for(int j=l;j<=r;++j) g[i][j]=g[i-1][j],p[i][j]=p[i-1][j];
if(l<=a[i]&&a[i]<=r) for(int j=0;j<=l;++j)
if(f[i-1][j]>=g[i][a[i]]) g[i][a[i]]=f[i-1][j]+1,p[i][a[i]]=i;
for(int j=a[i];j<=r;++j) if(g[i-1][j]&&g[i-1][j]>=g[i][a[i]]) g[i][a[i]]=g[i-1][j]+1,p[i][a[i]]=p[i-1][j];
if(l<=a[i]&&a[i]<=r) for(int j=r;j<10;++j)
if(g[i][a[i]]&&g[i][a[i]]+h[i+1][j]>ans) ans=g[i][a[i]]+h[i+1][j],L=p[i][a[i]],R=i;
}
}
}
return 0;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 143ms
memory: 19616kb
input:
100 564 3348010339062339968164170543732424036101480063385567796871300633327190066610177797479597931706239956680908434521050648311220502482402268964497684451036156162125014743550622955579737715237323508714467463047351532756224409691528642332476831673220319724437158730801472447651264708417183934709815...
output:
108 78 492 296 760 1295 1419 1 1585 92 46 399 888 745 1073 262 626 1212 338 190 971 258 950 1736 848 2 382 1804 43 1416 102 2 504 103 11 420 99 16 497 263 375 1113 1306 441 488 301 113 851 100 4 199 107 177 471 362 28 281 1108 1 1778 96 293 476 1094 538 1098 1039 63 69 706 533 1340 573 186 1381 91 9...
result:
ok correct answer! (100 test cases)