Pagini recente » Cod sursa (job #3303620) | Cod sursa (job #962903) | Cod sursa (job #2673344) | Cod sursa (job #3345277) | Cod sursa (job #3346282)
#include <bits/stdc++.h>
using namespace std;
ifstream in("scmax.in");
ofstream out("scmax.out");
int t[100005];
vector<int> v;
vector<int> pos;
vector<int> sol;
int maxl=0,n;
int cb(int x)
{
int st=0, dr=v.size()-1, poz=0;
while(st<=dr)
{
int mij=(st+dr)/2;
if(v[mij]>=x)
poz=mij, dr=mij-1;
else
st=mij+1;
}
return poz;
}
int main() {
in >> n;
for (int i=1;i<=n;i++) {
in >> t[i];
}
for (int i = 1; i <= n; i++) {
int x=t[i];
if (v.empty() || x>v[v.size()-1]) {
v.push_back(x);
pos.push_back(v.size()-1);
}
else {
int k=cb(x);
v[k]=x;
pos.push_back(k);
}
}
int k=v.size();
out<<k<<'\n';
for (int i=n;i>0;i--) {
if (pos[i-1]+1==k) {
sol.insert(sol.begin(),t[i]);
k--;
}
}
for (int i:sol) {
out<<i<<' ';
}
return 0;
}