Pagini recente » Cod sursa (job #34487) | Cod sursa (job #2549438) | Cod sursa (job #2198639) | Cod sursa (job #5629) | Cod sursa (job #2306961)
#include <bits/stdc++.h>
using namespace std;
ifstream fin ("munte.in");
ofstream fout ("munte.out");
const int NMAX = 100003;
const int INF = 2000000003;
int n, poz, ret, k;
int v [NMAX], M [NMAX], prevv [NMAX];
int CB (int X){
int st = 1, dr = NMAX - 3;
while (st <= dr){
int mij = (st + dr) / 2;
if (X <= v [M [mij]])
dr = mij - 1, ret = mij;
else st = mij + 1;
}
return ret;
}
void func (int poz){
if (prevv [poz] > 0)func (prevv [poz]);
fout << v [poz] << " ";
}
int main(){
fin >> n; v [n + 1] = INF;
memset (M, n + 1, sizeof M);
for (int i = 1; i <= n; i ++)fin >> v [i];
for (int i = 1; i <= n; i ++){
poz = CB (v [i]);
M [poz] = i;
prevv [i] = M [poz - 1];
}
for (int i = 1; i <= n + 1; i ++)
if (M [i] == n + 1){k = i - 1; break;}
fout << k << '\n';
func (M [k]);
return 0;
}