Pagini recente » Cod sursa (job #625065) | Cod sursa (job #2695685) | Cod sursa (job #1691010) | Cod sursa (job #117126) | Cod sursa (job #964151)
Cod sursa(job #964151)
#include <iostream>
#include <fstream>
#include <vector>
#include <string>
#include <algorithm>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
#define lmax 100001
int n,vv[lmax],bb[lmax],cc[lmax],k;
int up(int x){
int st=0,dr=k+1,md;
while(st<dr){
md=(st+dr)/2;
if(cc[md]<x)st=md+1; else dr=md;
}
return st;
}
void out(int n){
if(n>1){
for(int i=n-1;i>=0;i--)
if(bb[i]==k){
k--;
out(i);
g << vv[i] << " ";
}
}
}
int main(){
int p;
f >> n;
for(int i=0;i<n;i++) f >> vv[i];
for(int i=0;i<n;i++){
p=up(vv[i]);
cc[p]=vv[i];
if(p>k)k=p;
bb[i]=p;
}
g << k << "\n";
out(n);
//for(int i=0;i<n;i++) cout << bb[i] << " ";
return 0;
}