Pagini recente » Cod sursa (job #792000) | Cod sursa (job #1376445) | Cod sursa (job #601029) | Cod sursa (job #2057496) | Cod sursa (job #1497790)
#include <bits/stdc++.h>
using namespace std;
const int Nmax = (int) 1e5;
int v[Nmax];
int Q[Nmax], q;
int best[Nmax], pos[Nmax];
int sol[Nmax];
int binSearch(int position)
{
int p = 0;
for ( int step = (1 << (31 - __builtin_clz(q))); step; step >>= 1 )
{
if ( p + step < q && v[ Q[ p + step ] ] < v[position] )
p += step;
}
return p + ( v[ Q[p] ] < v[position] );
}
int main()
{
ifstream in("scmax.in");
ofstream out("scmax.out");
in.tie(0);
ios_base::sync_with_stdio(0);
int n, p;
in >> n;
for ( int i = 0; i < n; i++ )
{
in >> v[i];
p = binSearch(i);
if ( p >= q )
{
pos[i] = q;
Q[q++] = i;
}
else
{
pos[i] = p;
Q[p] = i;
}
}
in.close();
p = n - 1;
for ( int i = q - 1; i >= 0; i-- )
{
while ( pos[p] != i )
p--;
sol[i] = v[p];
}
out << q << '\n';
for ( int i = 0; i < q; i++ )
out << sol[i] << ' ';
out.close();
return 0;
}