Pagini recente » Cod sursa (job #3194834) | Cod sursa (job #2598741) | Cod sursa (job #3239570) | Cod sursa (job #2973153) | Cod sursa (job #2709593)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int n,a[100005],c[100005],poz;
vector <int> v,sol;
int main()
{
in>>n;
v.push_back(0);
c[0]=-1;
for(int i=1;i<=n;i++)
{
in>>a[i];
poz=0;
for(int j=(1<<30);j>0;j=j>>1)
{
if(poz+j<v.size())
{
if(a[v[poz+j]]<a[i])
poz+=j;
}
}
if(poz+1==v.size())v.push_back(i),c[i]=v[poz];
else v[poz+1]=i;
c[i]=v[poz];
}
int ind=v[v.size()-1];
while(c[ind]>=0)
{
sol.push_back(a[ind]);
ind=c[ind];
}
for(int i=sol.size()-1;i>=0;i--)
{
out<<sol[i]<<' ';
}
return 0;
}