Pagini recente » Cod sursa (job #260735) | Cod sursa (job #824842) | Cod sursa (job #2387014) | 24_februarie_simulare_oji_2024_clasa_10 | Cod sursa (job #2804635)
#include <bits/stdc++.h>
#define link pair<int, int>
#define x first
#define y second
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n;
int a[100001], t[100001], d[100001];
void read()
{
f>>n;
for(int i = 1;i <= n;++i)
f>>a[i];
}
void reconstruct(int x)
{
if(t[x])
reconstruct(t[x]);
g<<a[x]<<" ";
}
void solve()
{
d[1] = 1;
int len = 1;
for(int i = 2;i <= n;++i)
{
int left = 1, right = len;
while(left <= right)
{
int mid = (left + right) >> 1;
if(a[d[mid]] >= a[i])
right = mid - 1;
else
left = mid + 1;
}
if(left > len)
{
len++;
d[len] = i;
t[d[len]] = d[len - 1];
}
else
{
d[left] = i;
t[d[left]] = d[left - 1];
}
}
g<<len<<'\n';
reconstruct(d[len]);
}
int main()
{
read();
solve();
return 0;
}