Pagini recente » Cod sursa (job #2269377) | Cod sursa (job #83510) | Cod sursa (job #85210) | Cod sursa (job #1158440) | Cod sursa (job #2507876)
#include <iostream>
#include <fstream>
#define NMAX 100000
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, v[NMAX + 1], top = 0, best[NMAX + 1], i, lis[NMAX + 1],index;
int binary_s(int x) {
int l = 0, r = top;
while(l <= r) {
int m = (l + r) / 2;
if(best[m] < x && best[m + 1] >= x)
return m + 1;
else if(best[m] < x)
l = m + 1;
else
r = m - 1;
}
return top + 1;
}
void print(int i) {
if(lis[i]==1)
fout<<v[i]<<" ";
else {
int j=i-1;
while(lis[j]!=lis[i]-1)
j--;
print(j);
fout<<v[i]<<" ";
}
}
int main() {
fin >> n;
for(i = 1; i <= n; i++) {
fin >> v[i];
int poz = binary_s(v[i]);
lis[i] = poz;
if(top < poz)
top = poz, index=i;
best[poz] = v[i];
}
fout << top << endl;
print(index);
return 0;
}