Pagini recente » Cod sursa (job #441528) | Cod sursa (job #2426967) | Cod sursa (job #1536842) | Rating Suto Tamas (suto.tamas96) | Cod sursa (job #2260071)
#include <fstream>
#include <vector>
#include <algorithm>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int main()
{
int n;
fin>>n;
vector<int>a,v(n),dad;
for(int i=0;i<n;i++)
{
fin>>v[i];
int lo=0;
int hi=a.size()-1;
int ans=-1;
while(lo<=hi)
{
int mid=(lo+hi)/2;
if(v[i]>v[a[mid]])
{
lo=mid+1;
ans=mid;
}
else
{
hi=mid-1;
}
}
ans++;
if(ans==a.size())
{
a.push_back(i);
if(a.size()==1)
{
dad.push_back(-1);
}
else
{
dad.push_back(a[a.size()-2]);
}
}
else
{
a[ans]=i;
if(ans==0)
{
dad.push_back(-1);
}
else
{
dad.push_back(a[ans-1]);
}
}
}
int id=a.back();
vector<int>sl;
while(id!=-1)
{
sl.push_back(id);
id=dad[id];
}
reverse(sl.begin(),sl.end());
fout<<sl.size()<<"\n";
for(auto &x:sl)
{
fout<<v[x]<<" ";
}
fout<<"\n";
return 0;
}