Pagini recente » Cod sursa (job #1949619) | Cod sursa (job #2236206) | Cod sursa (job #238945) | Cod sursa (job #1205331) | Cod sursa (job #1787150)
#include <fstream>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
long long N, kp, kq, j, a[100003], poz[100003], q[100003], aux, SOL;
void put(long long x, long long i) {
long long st = 1, dr = kq, mij = 0;
while(st < dr) {
mij = (st + dr) / 2;
if(x > q[mij]) st = mij + 1;
else dr = mij - 1;
}
if(q[st] < x && q[st]) st++;
q[st] = x, kq = max(kq, (long long)st), poz[++kp] = st;
}
int main()
{
f >> N;
for(long long i = 1; i <= N; i++) f >> a[i];
for(long long i = 1; i <= N; i++)
put(a[i], i);
g << kq << "\n";
j = kp, aux = kq;
for(aux; aux >= 1; j--)
if(poz[j] == aux)
a[++SOL] = q[poz[j]], aux--;
for(int i = SOL; i >= 1; i--) g << a[i] << " ";
g << "\n";
return 0;
}