Pagini recente » Cod sursa (job #2481045) | Diferente pentru problema/inversmodular intre reviziile 13 si 12 | Cod sursa (job #2269365) | Cod sursa (job #1964730) | Cod sursa (job #3310628)
//
// main.cpp
// Subsir crescator maximal
//
// Created by Andrada Minca on 13.09.2025.
//
#include <fstream>
#include <vector>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
vector<long long> v,sc;
int bs(long long x,int st,int dr)
{
while(st<dr)
{
int mid=(st+dr+1)/2;
if(x>v[sc[mid]])st=mid;
else dr=mid-1;
}
return dr+1;
}
int main()
{
int n;
cin>>n;
v.resize(n+1);
sc.resize(n);
vector<int>prev(n);
int st=0,dr=0;
sc[0]=n;
v[n]=0;
vector<int> sol;
for(int i=0;i<n;i++)
{
cin>>v[i];
int poz=bs(v[i],st,dr);
sc[poz]=i;
if(poz>dr)
{
dr++;
}
prev[i]=sc[poz-1];
}
cout<<dr<<'\n';
for(int i=sc[dr];i!=n;i=prev[i])
{
sol.push_back(i);
}
for(int i=dr-1;i>=0;i--)cout<<v[sol[i]]<<" ";
return 0;
}