Pagini recente » Cod sursa (job #846291) | Cod sursa (job #631610) | Cod sursa (job #2454823) | Cod sursa (job #3031211) | Cod sursa (job #346215)
Cod sursa(job #346215)
#include<fstream>
using namespace std;
int a[100001],m[100001],prev[100001],l=0,n,val;
void caut(int st,int dr,int i)
{
if(st<=dr)
{int mij=(st+dr)/2;
if(a[m[mij]]<a[i]) {val=mij;caut(mij+1,dr,i);}
else caut(st,mij-1,i);
}
}
int max(int a,int b)
{if(a<b) return b;
return a; }
int main()
{ifstream in("scmax.in");
ofstream out("scmax.out");
in>>n;
m[0]=0;l=0;
for(int j=1;j<=n;j++) in>>a[j];
for(int i=1;i<=n;i++)
{int j=0;int st=0,dr=l;int gasit=0;
/*while(gasit==0)
{if(st<dr) {int mij=(st+dr)/2;
if(a[m[mij]]<a[i]) }
}*/
caut(0,l,i);j=val;
prev[i]=m[j];
if(a[i]<a[m[j+1]] || j==l) m[j+1]=i;
l=max(l,j+1);
}
out<<l<<'\n';
for(int i=1;i<=l;i++) out<<a[m[i]]<<" ";
return 0;
}