Pagini recente » Cod sursa (job #2098910) | Cod sursa (job #729448) | Cod sursa (job #2689268) | Cod sursa (job #658785) | Cod sursa (job #932320)
Cod sursa(job #932320)
#include <iostream>
#include <fstream>
#include <vector>
#include <algorithm>
#define nmax 100005
using namespace std;
int v[nmax], h[nmax], n;
vector <int> q, sol;
void insert(int i) {
int val = v[i];
int lo, mid, hi;
lo = -1;
hi = q.size();
while(hi - lo > 1) {
mid = lo + (hi-lo)/2;
if( val > q[mid] ) lo = mid;
else hi = mid;
}
if(hi == q.size()) {
q.push_back(val);
h[i] = q.size();
}
else {
q[hi] = val;
h[i] = hi + 1;
}
//for(i=0; i<q.size(); i++) cout<<q[i]<<" ";
//cout<<"\n";
}
int main() {
ifstream f("scmax.in");
ofstream g("scmax.out");
f>>n;
for(int i=1; i<=n; i++) {
f>>v[i];
insert(i);
}
int dim = q.size(), i;
g<<dim<<"\n";
for(i=n; i>=1; i--)
if(h[i] == dim) {
sol.push_back(v[i]);
dim--;
}
for(i=sol.size()-1; i>=0; i--) g<<sol[i]<<" ";
g<<"\n";
return 0;
}