Pagini recente » Borderou de evaluare (job #1501380) | Cod sursa (job #3353974) | Cod sursa (job #3353986) | Borderou de evaluare (job #2442163) | Cod sursa (job #3353969)
#include <bits/stdc++.h>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
set<pair<int,int>>s;
int v[100005],d[100005],tata[100005];
void afisare(int poz){
if(tata[poz])
afisare(tata[poz]);
fout<<v[poz]<<" ";
}
int main() {
int n;
fin>>n;
for(int i = 1; i <= n; i++) {
fin>>v[i];
d[i] = 1;
}
s.insert(make_pair(v[1],1));
for(int i = 2; i <= n ; i++){
for(auto it = s.begin(); it!=s.end(); it++){
if(it->first >= v[i])
break;
if(d[it->second] + 1 > d[i])
d[i] = d[it->second] + 1, tata[i] = it->second;
}
s.insert(make_pair(v[i],i));
}
int max0 = 0, poz;
for(int i = 1; i <=n ;i++)
if(d[i] > max0)
max0 = d[i],poz = i;
fout<<max0<<'\n';
afisare(poz);
return 0;
}