Pagini recente » Cod sursa (job #2142058) | Cod sursa (job #728417) | Cod sursa (job #1455980) | Cod sursa (job #2186415) | Cod sursa (job #2152749)
// facem varianta de 70 de pt cu programare dinamica.
// am revenit si am o varianta de 100 cu cautare binara.
#include <iostream>
#include <fstream>
#include <deque>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int n,i,j,nr,ns,st,dr,mid,id,mx;
deque<int> s[100005];
int main () {
fin>>n;
fin>>nr;
s[1].push_front(nr);
ns=1;
for(i=2;i<=n;i++)
{
fin>>nr;
st=1; dr=ns;
while(st<=dr)
{
mid=st+(dr-st)/2;
if(s[mid].front()>=nr) st=mid+1;
else dr=mid-1;
}
if(s[mid].front()>=nr) mid++;
if(mid>1&&s[mid-1].front()<nr) mid--;
if(nr<=s[ns].front())
{ ns++; s[ns].push_back(nr); }
else s[mid].push_front(nr);
}
mx=-1;
for(i=1;i<=ns;i++)
if((int)s[i].size()>mx)
{
mx=(int)s[i].size();
id=i;
}
fout<<mx<<"\n";
for(j=(int)s[id].size()-1;j>=0;j--)
fout<<s[id][j]<<" ";
}