Pagini recente » Borderou de evaluare (job #1520887) | Cod sursa (job #568154) | Cod sursa (job #759205) | Cod sursa (job #706107) | Cod sursa (job #2514592)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int a[100002],b[100002],c[100002];
int main()
{
int n,i,r,pas,m=0;
in>>n;
for(i=0;i<n;i++)
{
in>>a[i];
r=0;pas=1<<30;
while(pas)
{
if(r+pas<=m&&a[i]>a[b[r+pas]])
r+=pas;
pas>>=1;
}
b[++r]=i;
if(r!=1)
c[i]=b[r-1];
else
c[i]=-1;
m=max(m,r);
}
for(r=b[m],i=0;c[r]!=-1;r=c[r],i++)
b[i]=a[r];
b[i]=a[r];
out<<m<<"\n";
for(i=m-1;i>=0;i--)
out<<b[i]<<" ";
}