Pagini recente » Cod sursa (job #695371) | Cod sursa (job #2652357) | Cod sursa (job #2807474) | Cod sursa (job #2082310) | Cod sursa (job #2131410)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
const int N=100001;
int m, v[N], pred[N], n, poz[N], lung[N], val[N];
int cautb(int x);
void subsir (int p);
int main()
{
int i, j;
f>>n;
for (i=0; i<n; i++)
{
f>>v[i];
}
m=0;
for (i=0; i<n; i++)
{
j=cautb(v[i]);
if (j==m)
{
m++;
}
val[j+1]=v[i];
poz[j+1]=i;
lung[i]=j+1;
pred[i]=poz[j];
}
g<<m<<'\n';
subsir(poz[m]);
return 0;
}
int cautb(int x)
{
int r=0, pas=1<<16;
while (pas!=0)
{
if(r+pas<=m && val[r+pas]<x)
{
r+=pas;
}
pas /= 2;
}
return r;
}
void subsir(int p)
{
if(pred[p]!=0)
{
subsir(pred[p]);
}
g<<v[p]<<" ";
}