Pagini recente » Clasamentul arhivei de probleme | Cod sursa (job #2656101) | Cod sursa (job #3195105) | Cod sursa (job #978988) | Cod sursa (job #2864228)
#include<bits/stdc++.h>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001],poz[100001],sol[100001],n;//poz=pozitia valorilor din subsirul cautat
void afisare(int x)
{
if (x!=0) {afisare(sol[x]);
g<<v[x]<<' ';
}
}
int main()
{f>>n;
int i;
for (i=1;i<=n;i++) f>>v[i];
int st=1,dr,mij,p,l=0;
for (i=1;i<=n;i++) {st=1;
dr=l;
while (st<=dr) {mij=(st+dr)/2;
if (v[poz[mij]]<v[i]) st=mij+1;
else dr=mij-1;
}
p=st;
if (p>l) l=p;
poz[p]=i;
sol[i]=poz[p-1];
//for (int i=1;i<=l;i++) cout<<poz[i]<<' ';
//cout<<'\n';
}
g<<l<<'\n';
afisare(poz[l]);
}