Pagini recente » Cod sursa (job #3148665) | Cod sursa (job #901599) | Cod sursa (job #423892) | Cod sursa (job #3187572) | Cod sursa (job #216079)
Cod sursa(job #216079)
#include <fstream>
#define MAX 100001
using namespace std;
ifstream fin ("scmax.in");
ofstream fout ("scmax.out");
int sir[MAX],poz[MAX],tata[MAX],sir_f[MAX];
int lg,n;
void citire()
{
fin>>n;
for (int i=0;i<n;i++)
fin>>sir[i];
}
void rezolvare()
{
int mij,st,dr;
sir_f[1]=sir[1];
poz[1]=1;
lg=1;
for (int i=2;i<n;i++)
{
if (sir[i]>sir_f[lg])
{
lg++;
sir_f[lg]=sir[i];
tata[lg]=poz[lg-1];
poz[lg]=i;
}
if (sir[i]<sir_f[1])
{
sir_f[1]=sir[1];
poz[1]=i;
tata[1]=0;
}
st=1;
dr=lg;
while (dr-st>1)
{
mij=(st+dr)>>1;
if (sir_f[mij]<sir[i])
st=mij;
else
dr=mij;
}
if (sir[i]<sir_f[dr])
{
poz[dr]=i;
tata[i]=poz[st];
sir_f[dr]=sir[i];
}
}
}
void afishare(int x)
{
if (!x)
return;
afishare(x-1);
fout<<sir_f[x]<<" ";
}
int main ()
{
citire();
rezolvare();
fout<<lg<<"\n";
afishare(lg);
return 0;
}