Pagini recente » Cod sursa (job #2671619) | Cod sursa (job #2573533) | Cod sursa (job #1467539) | Cod sursa (job #1224419) | Cod sursa (job #3274009)
#include <bits/stdc++.h>
#define DIM 100001
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n, x, len;
int i, j;
int v[DIM], best[DIM], l[DIM];
stack <int> ans;
int cb(int st, int dr, int target){
int ret = 0;
while(st <= dr){
int mij = (st + dr) / 2;
if(best[mij] > target){
dr = mij - 1;
ret = mij;
}else st = mij + 1;
}
return ret;
}
int main(){
fin >> n;
for(i = 1; i <= n; i++){
fin >> x;
v[i] = x;
if(best[len] < x){
best[++len] = x;
l[i] = len;
}else{
int poz = cb(1, len, x);
best[poz] = x;
l[i] = poz;
}
}
fout << len << "\n";
for(i = n; i > 0; i--)
if(l[i] == len){
ans.push(v[i]);
len--;
}
while(!ans.empty()){
fout << ans.top() << " ";
ans.pop();
}
}