Pagini recente » Cod sursa (job #3202874) | Cod sursa (job #1517584) | Cod sursa (job #2230262) | Cod sursa (job #2068163) | Cod sursa (job #2202779)
//http://www.infoarena.ro/problema/scmax Subsir crescator maximal
#include <bits/stdc++.h>
using namespace std;
ifstream f ("scmax.in");
ofstream g ("scmax.out");
const int NMAX = 1e5 + 5;
int n, m = 1;
int v[NMAX], capat[NMAX], poz[NMAX], sol[NMAX];
void binSearch(int val, int i) {
int lo = 1;
int hi = m;
int mid;
int ret = -1;
while(lo <= hi) {
mid = lo + (hi - lo) / 2;
if(capat[mid] < val) {
ret = mid;
lo = mid + 1;
} else {
hi = mid - 1;
}
}
if(ret == m) {
++m;
}
capat[ret + 1] = val;
poz[i] = ret + 1;
}
int main() {
f >> n;
for (int i = 1; i <= n; ++i) {
f >> v[i];
binSearch(v[i], i);
}
int ans = m;
for(int i = n; ans > 1; --i) {
if(poz[i] == ans) {
sol[ans] = v[i];
--ans;
}
}
g << m - 1 << '\n';
for(int i = 2; i <= m; ++i) {
g << sol[i] << ' ';
}
f.close();
g.close();
return 0;
}