Cod sursa(job #1528496)

Utilizator cboneCristi Niculae cbone Data 19 noiembrie 2015 19:24:27
Problema Cel mai lung subsir comun Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 1.38 kb
#include <bits/stdc++.h>
using namespace std;
int N,M,v1[2000][2],v2[2000],i,vint[2000][2000],k,j,P,ok,maxi;
int main(){
    freopen("cmlsc.in", "r", stdin);
    freopen("cmlsc.out", "w", stdout);
    scanf("%d %d",&N,&M);
    for(i=0;i<N;i++){
        scanf("%d",&v1[i][0]);
    }
    for(i=0;i<M;i++){
        scanf("%d",&v2[i]);
    }

    for(i=0;i<N;i++){
        for(j=0;j<M&&v1[i][0]!=v2[j];j++);
        if(j<M)
            v1[i][1]=j;
        else v1[i][1]=-1;
    }
    for(i=0;i<N;i++){
        ok=0;
        if(v1[i][1]!=-1){
            for(j=0;j<P;j++){
                if(vint[j][1]<v1[i][1]){
                    vint[j][2]++;
                    vint[j][vint[j][2]+2]=vint[j][0];
                    vint[j][0]=v1[i][0];
                    vint[j][1]=v1[i][1];
                    ok=1;
                }
            }
            if(!ok){
                vint[P][0]=v1[i][0];
                vint[P][1]=v1[i][1];
                vint[P][2]=0;
                P++;
            }
        }
    }
    for(i=0;i<P;i++){
        maxi=max(maxi,vint[i][2]+1);
    }
    ok=1;
    for(i=0;i<P&&ok;i++){
        if(vint[i][2]+1==maxi){
            printf("%d\n",maxi);
            for(j=3;j<=maxi+1;j++){
                printf("%d ",vint[i][j]);
            }
            printf("%d",vint[i][0]);
            ok=0;
        }
    }
    return 0;
}