Pagini recente » Cod sursa (job #1444032) | Monitorul de evaluare | Cod sursa (job #1006218) | Cod sursa (job #1597645) | Cod sursa (job #2158151)
#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];
while(k)
{
b[poz]=a[ind[k]];
poz++;
k--;
}
for(int i=poz-1; i>0; i--)
g<<b[i]<<' ';
return 0;
}