Pagini recente » Cod sursa (job #878083) | Cod sursa (job #1158179) | Cod sursa (job #913392) | Cod sursa (job #1544430) | Cod sursa (job #2337704)
#include <cstdio>
#define N 100002
#include <iostream>
using namespace std;
FILE *f,*g;
int x[N],pred[N],v[N],lg;
void write(int poz)
{
if(pred[poz])
{
write(pred[poz]);
}
fprintf(g,"%d ",x[poz]);
}
int cb(int i)
{
if(lg==0 || x[v[lg]]<x[i])
v[++lg]=i,pred[i]=v[lg-1];
else
{
int st,dr,mij,poz=1;
st=1,dr=lg;
while(st<=dr)
{
mij=(st+dr)/2;
if(x[v[mij]]<x[i])
poz=st=mij+1;
else
dr=mij-1;
}
v[poz]=i;
pred[i]=v[poz-1];
}
}
int main()
{
f=fopen("scmax.in","r");
g=fopen("scmax.out","w");
int n;
fscanf(f,"%d",&n);
for(int i=1;i<=n;++i)
{
fscanf(f,"%d",&x[i]);
cb(i);
}
fprintf(g,"%d\n",lg);
write(v[lg]);
fclose(f);
fclose(g);
return 0;
}