Pagini recente » Cod sursa (job #2534439) | Istoria paginii utilizator/uti_cozma_nutu | Cod sursa (job #1603867) | Monitorul de evaluare | Cod sursa (job #1306321)
#include <cstdio>
#include <algorithm>
#include <fstream>
#define inf 2000000000
#define nmax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,m,sol,v[nmax];
int d[nmax],t[nmax];
int p,u,mid;
void afis(int k)
{if (t[k]>0) afis(t[k]);
g<<v[k]<<' ';
}
int main(){
int i,j;
f>>n;
d[0]=1<<20;v[0]=1<<20;
for (i=1;i<=n;i++) {
f>>v[i];
}
for (i=1;i<=n;i++) {
p=1;
u=m;
sol=0;
while (p<=u) {
mid=(p+u)>>1;
if (v[i]>v[d[mid]]) {
sol=mid;
p=mid+1;
}
else {
u=mid-1;
}
}
if (sol>=m) m++;
if (v[i]<v[d[1]]) d[1]=i;
if (mid&&v[mid]<v[d[sol+1]]) {
d[sol+1]=i;
t[i]=d[sol];
}
}
g<<m<<'\n';
afis(d[m]);
g<<'\n';
return 0;
}