Pagini recente » Cod sursa (job #2374233) | Cod sursa (job #939247) | Cod sursa (job #2867712) | Cod sursa (job #2867396) | Cod sursa (job #2369752)
#include<fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int n,st,dr,nr,poz,l[100003],sir[100003],p[100003],a[100003],m,maxim;
void afisare(int x){
if(p[x]!=0) afisare(p[x]);
g<<a[x]<<" ";
}
int main()
{
f>>n;
l[1]=1;
sir[1]=1;
nr=1;
l[0]=0;
f>>a[1];
for(int i=2;i<=n;++i){
f>>a[i];
st=0;dr=nr;
poz=0;
bool ok=1;
while(st<=dr){
m=(st+dr)/2;
if(a[l[m]]<a[i]&&a[l[m+1]]>=a[i]){poz=m;ok=0;break;}
else if(a[l[m+1]]<a[i]) st=m+1;
else dr=m-1;
}
if(ok) poz=nr;
p[i]=l[poz];
sir[i]=poz+1;
l[poz+1]=i;
if(nr<poz+1) nr=poz+1;
}
maxim=0;
poz=0;
for(int i=1;i<=n;++i){
if(maxim<sir[i]){
maxim=sir[i];
poz=i;
}
}
g<<maxim<<'\n';
afisare(poz);
}