Pagini recente » Cod sursa (job #2526552) | Cod sursa (job #1078176) | Cod sursa (job #2385913) | Cod sursa (job #2917785) | Cod sursa (job #2897657)
#include <fstream>
#include <iostream>
#include <vector>
#define MAX 100010
#define INF 2000000002
using namespace std;
int v[MAX];
int predec[MAX];
int prev_key[MAX];
class node{
public:
int data;
int key;
};
node sir[MAX];
int binsearch(int k, int l, int r){
int m = (l+r)/2;
if(r - l == 1)
return r;
else if(sir[m].data >= k)
return binsearch(k, l, m);
else
return binsearch(k, m, r);
}
void update(int key, int k, int n){
int idx;
idx = binsearch(k, 1, n+1);
sir[idx].data = k;
sir[idx].key = key;
prev_key[key] = sir[idx - 1].key;
}
int main(){
ifstream fin;
ofstream fout;
fin.open("scmax.in");
fout.open("scmax.out");
int n, i;
fin >> n;
sir[1].data = 0;
for(i = 2; i <= n + 3; ++i){
sir[i].data = INF;
}
for(int i=1; i <= n; ++i){
fin >> v[i];
update(i, v[i], n);
}
int size = binsearch(INF, 1, n+2) - 2;
fout << size << "\n";
int ans[MAX];
int top = 0;
int current;
current = sir[size+1].key;
while(v[current] != 0){
ans[top++] = v[current];
current = prev_key[current];
}
for(int i=size - 1; i>=0; --i)
fout << ans[i] << " ";
}