Pagini recente » Cod sursa (job #964910) | Cod sursa (job #1066010) | Cod sursa (job #1624660) | Cod sursa (job #59378) | Cod sursa (job #2166126)
#include <iostream>
#include <fstream>
#include <vector>
using namespace std;
ifstream h("scmax.in");
ofstream g("scmax.out");
vector<int> a, b;
int t[100020], n;
void cmlsc(vector<int> &a, vector<int> &b){
int c=0, f=0, l=0;
b.push_back(0);
t[0]=0;
for(int i=1; i<a.size(); i++){
if(a[i]>a[b.back()]){
t[i]=b.back();
b.push_back(i);
}
for(f=0, l=b.size()-1; f<l;){
c=(f+l)/2;
if(a[i]>a[b[c]])f=c+1; else l=c;
}
if(a[i]<a[b[l]]){
b[l]=i;
if(l>0) t[i]=b[l-1];
}
}
for(l=b.size(), f=b.back(); l--; f=t[f])b[l]=f;
}
int main()
{
h>>n;
for(int i=1; i<=n; i++){
int x;
h>>x;
a.push_back(x);
}
cmlsc(a, b);
g<<b.size()<<"\n";
for(int i=0; i<b.size(); i++)g<<a[b[i]]<<" ";
return 0;
}