Pagini recente » Cod sursa (job #2942223) | Cod sursa (job #2169735) | Cod sursa (job #1669789) | Cod sursa (job #2242482) | Cod sursa (job #905754)
Cod sursa(job #905754)
#include<fstream>
using namespace std;
ifstream f("scmax.in"); ofstream g("scmax.out");
int n, a[100009], p[100009], q[100009], len;
inline int cauta(int st, int dr, int poz)
{
int m, x;
while(st <= dr)
{
m = (st + dr) >> 1;
if(p[m] < a[poz]) st = m + 1;
else
x = m, dr = m - 1;
}
return x;
}
int main()
{
f >> n;
for(int i = 1; i <= n; ++i) f >> a[i];
for(int i = 1; i <= n; ++i)
{
if(a[i] > p[len])
p[++len] = a[i], q[i] = len;
else
{
int poz = cauta(1, len, i);
p[poz] = a[i];
q[i] = poz;
}
}
int k = 0;
g<<len<<'\n';
for(int i = n; i && len; --i)
if(q[i] == len)
{
p[++k] = a[i];
len--;
}
for(int i = k; i >= 1; --i) g<<p[i]<<' ';
g<<'\n';
g.close();
return 0;
}