Pagini recente » Cod sursa (job #738375) | Istoria paginii runda/simulare-oji-matei-2 | Cod sursa (job #195564) | Cod sursa (job #474946) | Cod sursa (job #2158192)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,last[100005],a[100005],ind[100005],k=1,t[100005];
int main()
{
f>>n;
for(int i=1; i<=n; i++)
f>>a[i];
last[k]=a[1];
ind[k]=1;
t[1]=0;
for(int i=2; i<=n; i++)
{
int st=1,dr=k,mij;
if(a[i]>last[k])
{
k++;
last[k]=a[i];
ind[k]=i;
t[i]=ind[k-1];
}
else
{
while(st<=dr)
{
mij= (st+dr) /2;
if(a[i]>last[mij])
st=mij+1;
else if(a[i]<last[mij])
dr=mij-1;
else break;
}
last[mij]=a[i];
ind[mij]=i;
t[i]=ind[mij-1];
}
}
g<<k<<'\n';
int poz=1,b[100005];
b[poz]=ind[k];
poz++;
k--;
while(k)
{
b[poz]=t[b[poz-1]];
poz++;
k--;
}
for(int i=poz-1; i>0; i--)
g<<a[b[i]]<<' ';
return 0;
}