Pagini recente » Cod sursa (job #1259822) | Cod sursa (job #1357175) | Cod sursa (job #1527416) | Cod sursa (job #2650178) | Cod sursa (job #587492)
Cod sursa(job #587492)
#include <cstdio>
#include <cstdlib>
#include <string>
int cmp(const void *a, const void *b){
return (*(int*)a-*(int*)b);
}
int main(){
freopen("secv.in", "r", stdin);
freopen("secv.out", "w", stdout);
int N, S[5010], T[5010], D[5010], L[5010], i, j, k, max;
scanf("%d", &N);
for(i=0; i<N; i++)
scanf("%d", S+i);
memcpy(T, S, sizeof(S));
qsort(T, N, sizeof(int), cmp);
j=0;
for(i=0; i<N; i++)
if(T[i]!=T[j])
T[++j]=T[i];
memset(D, -1, sizeof(D));
memset(L, 0, sizeof(L));
max=0;
for(i=0; i<N; i++){
if(S[i]==T[0])
D[i]=0;
if(D[i]!=-1){
for(k=i+1; k<N && T[D[i]+1]!=S[k]; k++)
;
if(k<N){
D[k]=D[i]+1;
L[k]=L[i]+k-i;
if(D[k]==j){
D[k]=-1;
max=(max>L[k])? max: L[k];
}
}
}
}
printf("%d\n", max+1);
return 0;
}