Pagini recente » Istoria paginii runda/lotul_pestisorilor | Cod sursa (job #773396) | Cod sursa (job #640601) | Cod sursa (job #937867) | Cod sursa (job #956388)
Cod sursa(job #956388)
#include<iostream>
#include<fstream>
#include<vector>
#include<list>
using namespace std;
int scn;
vector<int> a, p, s;
int main(){
int i, n, m, scmax, step;
ifstream in("scmax.in");
ofstream out("scmax.out");
in>>n;
a.resize(n), p.resize(n), s.resize(n);
scmax = 0;
for(i=0; i<n; i++){
in>>a[i];
for(step=1; step<<1<scmax; step<<=1);
for(m=scmax; step; step>>=1)
if(m-step >=0 && a[s[m-step]]>=a[i]) m-=step;
s[m] = i;
p[i] = m>0?s[m-1]:-1;
if(m==scmax) scmax++;
}
out<<scmax<<endl;
list<int> result;
m = s[scmax-1];
while(m!=-1){
result.push_front(a[m]);
m = p[m];
}
for(int i: result)
out<<i<<" ";
in.close();
out.close();
return 0;
}