Pagini recente » Cod sursa (job #799336) | Cod sursa (job #1306108) | Cod sursa (job #753101) | Cod sursa (job #75173) | Cod sursa (job #1975494)
#include<iostream>
#include<fstream>
#include<string.h>
#include<algorithm>
using namespace std;
long long a[100005];
long long fina[100005];
long v[100005];
long res[100005];
long n;
bool comp(long x,long y)
{
return a[x]<=a[y];
}
long lungime=0;
int main()
{
ifstream f("scmax.in",fstream::in);
ofstream g("scmax.out",fstream::out);
f>>n;
for(long i=0;i<n;i++)
f>>a[i];
for(long i=0;i<n;i++)
res[i]=-1;
v[0]=0;
lungime=1;
for(long i=1;i<n;i++)
if(a[i]>=a[v[lungime-1]]) {v[lungime]=i;res[i]=v[lungime-1];lungime++;}
else{
long *r=upper_bound(v,v+lungime,i,comp);
v[r-v]=i;
if(r-v-1<0) res[i]=-1;
else
res[i]=v[r-v-1];
}
g<<lungime<<endl;
long nr=0;
fina[nr++]=a[v[lungime-1]];
long long w=res[v[lungime-1]];
while(w!=-1)
{
fina[nr++]=a[w];
w=res[w];
}
for(long i=nr-1;i>=0;i--)
g<<fina[i]<<" ";
}