Pagini recente » Cod sursa (job #2493969) | Cod sursa (job #1103345) | Cod sursa (job #834714) | Cod sursa (job #1395091) | Cod sursa (job #1011889)
#include <fstream>
#include <iostream>
using namespace std;
ifstream fi ("scmax.in");
ofstream fo ("scmax.out");
int n, nes, gasit, i, e, ind[100001], a[100001], p[100001];
int caut (int v) { // valoarea cautata
int s = 1, d = nes, m;
do {
m = (s + d) / 2;
if (a[ind[m]] < v and v <= a[ind[m+1]])
return m + 1;
else
if (v < a[ind[m]])
d = m - 1;
else
s = m + 1;
} while (s <= d);
return 1;
}
int main () {
fi >> n;
for (i = 1; i <= n; i++)
fi >> a[i];
nes = 1; ind[1] = 1;
for (i = 2; i <= n; i++) {
if (a[i] > a[ind[nes]]) {
p[i] = nes; nes++; ind[nes] = i;
}
else { // Cautam cel mai mic element >= a[i], al carui pozitie a fost retinuta in ind
gasit = caut(a[i]);
ind[gasit] = i;
}
/*
cout << "i = " << i << endl;
for (e = 1; e <= nes; e++)
cout << ind[e] << ' ';
cout << endl;
for (e = 1; e <= nes; e++)
cout << a[ind[e]] << ' ';
cout << endl;*/
}
fo << nes;
return 0;
}