Pagini recente » Cod sursa (job #1416898) | Cod sursa (job #2982687) | Cod sursa (job #79079) | Cod sursa (job #1380) | Cod sursa (job #2736628)
#include <bits/stdc++.h>
#define INF 1e9
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int st[100005], vf;
int prec[100005];
int v[100005];
int main()
{
int N;
fin >> N;
for(int i = 1; i <= N; i++)
{
fin >> v[i];
if(v[i] > v[st[vf]])
st[++vf] = i, prec[i] = st[vf - 1];
else
{
int l = 1, r = vf, mij = (l + r) / 2, poz = 0;
while(l <= r)
{
if(v[st[r]] < v[i])
{
l = mij + 1;
poz = mij;
}
else
r = mij - 1;
mij = (l + r) / 2;
}
st[poz + 1] = i;
prec[i] = st[poz];
}
}
fout << vf << '\n';
vector <int> ans;
int poz = st[vf];
while(poz != 0)
{
ans.push_back(v[poz]);
poz = prec[poz];
}
for(int i = vf - 1; i >= 0; i--)
fout << ans[i] << " ";
return 0;
}