Cod sursa(job #2152771)

Utilizator shantih1Alex S Hill shantih1 Data 5 martie 2018 19:46:25
Problema Subsir crescator maximal Scor 20
Compilator cpp Status done
Runda Arhiva educationala Marime 0.98 kb
// 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]<<" ";
}