Pagini recente » Cod sursa (job #348705) | Cod sursa (job #373216) | Cod sursa (job #936485) | Cod sursa (job #3211221) | Cod sursa (job #2152771)
// 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>
#include <vector>
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];
vector<deque<int>> v;
deque<int> q;
int main () {
fin>>n;
fin>>nr;
q.push_back(nr);
v.push_back(q);
v.push_back(q);
q.pop_back();
ns=1;
for(i=2;i<=n;i++)
{
fin>>nr;
st=1; dr=ns;
while(st<=dr)
{
mid=st+(dr-st)/2;
if(v[mid].front()>=nr) st=mid+1;
else dr=mid-1;
}
if(v[mid].front()>=nr) mid++;
if(mid>1&&v[mid-1].front()<nr) mid--;
if(nr<=v[ns].front())
{
ns++;
q.push_back(nr);
v.push_back(q);
q.pop_back();
}
else v[mid].push_front(nr);
}
mx=-1;
for(i=1;i<=ns;i++)
if((int)v[i].size()>mx)
{
mx=(int)v[i].size();
id=i;
}
fout<<mx<<"\n";
for(j=(int)v[id].size()-1;j>=0;j--)
fout<<v[id][j]<<" ";
}