Cod sursa(job #1102771)
| Utilizator | Data | 9 februarie 2014 14:40:39 | |
|---|---|---|---|
| Problema | Subsir crescator maximal | Scor | 100 |
| Compilator | cpp | Status | done |
| Runda | Arhiva educationala | Marime | 0.82 kb |
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
long long pred[100100],m,j=1,d,i,n,x[100100],l,v[100100];
void afisare(int nr)
{
if(pred[nr])
afisare(pred[nr]);
g<<v[nr]<<" ";
}
int main()
{
f>>n;
for(i=1;i<=n;i++)
{
f>>v[i];
while((j<<1)<=l)
j<<=1;
m=0;
d=j;
while(d)
{
if(m+d<=l&&v[i]>v[x[m+d]])
m+=d;
d>>=1;
}
if(m==l)
{
x[++l]=i;
pred[i]=x[l-1];
}
else
{
if(v[i]<v[x[m+1]])
{
x[m+1]=i;
pred[i]=x[m];
}
}
}
g<<l<<'\n';
afisare(x[l]);
g<<'\n';
return 0;
}
