Pagini recente » Cod sursa (job #2724367) | Cod sursa (job #340202) | Istoria paginii runda/tema_1_lot2023 | Cod sursa (job #2983386) | Cod sursa (job #2795216)
#include <iostream>
#include <fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
int n,x,l_sir = 1;
int v[100001],v_final[100001],poz_in_v_final[100001];
int cb(int x)
{
int st = 1,dr = l_sir,mij,ans = l_sir+1;
while(st<=dr)
{
mij = (st+dr)/2;
if(v_final[mij]==x)
return mij;
if(v_final[mij]>x)
{
ans = mij;
dr = mij-1;
}
else if (v_final[mij]<x)
st = mij+1;
}
return ans;
}
void afisare(int cnt,int x)
{
if(cnt==0)
return;
for(int i = x;i>=0;i--)
{
if(poz_in_v_final[i]==cnt)
{
afisare(cnt-1,x-1);
g << v[i]<< " ";
return;
}
}
}
int main()
{
f >> n;
f >> x;
v_final[1] = x;
poz_in_v_final[1] = 1;
for(int i = 2;i<=n;i++)
{
f >> v[i];
int poz = cb(v[i]);
v_final[poz] = v[i];
poz_in_v_final[i] = poz;
l_sir = max(l_sir,poz);
}
afisare(l_sir,n);
}