Cod sursa(job #2421426)

Utilizator BlaugranasEnal Gemaledin Blaugranas Data 15 mai 2019 08:15:18
Problema Cel mai lung subsir comun Scor 0
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 0.98 kb
#include<cstdio>
#include<vector>
using namespace std;
#define pb push_back
#define mp make_pair
#define sz size
#define F first
#define S second
const int S=512,M=2048;
int x[M],y[M],n,m,p,s[M],i,j,k,e,f,u,v;
vector<int> a[S];
vector<pair<int,int>> b[M];
void R(int l,int c,int d)
{
	if(d<=0)
    {
        printf("%d ",x[l]);
        return;
    }
    int i,j;
	for(j=b[d].sz(),i=0;i<j;++i)
		if(b[d][i].F<l&&b[d][i].S<c)
            R(b[d][i].F,b[d][i].S,d-1);
}
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",x+i);
	for(i=0;i<m;++i)
        scanf("%d",y+i);
	for(i=0;i<m;++i)
        a[y[i]].pb(i);
	for(i=0;i<M;++i)
        s[i]=m;
	for(i=0;i<n;s[e]=f,++i)
		for(k=x[i],e=1,f=s[e],u=a[k].sz(),j=0;j<u;)
		{
			v=a[k][j],p=max(p,e);
			if(v<=s[e])
				b[e].pb(mp(i,v)),f=min(f,v),++j;
			else
				s[e]=f,++e,f=s[e];
		}
	printf("%d\n",p),R(b[p][0].F,b[p][0].S,p-1);
}