Pagini recente » Cod sursa (job #2536054) | Cod sursa (job #1236441) | Cod sursa (job #2587183) | Cod sursa (job #1185315) | Cod sursa (job #2158061)
// 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 <vector>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
int lg,n,i,j,v[100005],rz[100005];
vector<int> tail;
int cbin(int k)
{
int st=1,dr=lg-1,m=0;
while(st<=dr)
{
m=st+(dr-st)/2;
if(tail[m]>=k) dr=m-1;
else st=m+1;
}
if(tail[m]<k) m++;
if(tail[m-1]>=k) m--;
return m;
}
int main () {
fin>>n;
for(i=1;i<=n;i++)
fin>>v[i];
tail.push_back(v[1]);
lg=0;
for(i=2;i<=n;i++)
{
if(v[i]<=tail[0]) tail[0]=v[i];
else if(v[i]>tail[lg])
{
tail.push_back(v[i]);
lg++;
for(j=0;j<=lg;j++)
rz[j]=tail[j];
}
else if(v[i]<tail[lg]) tail[cbin(v[i])]=v[i];
}
fout<<lg+1<<"\n";
for(i=0;i<=lg;i++)
fout<<rz[i]<<" ";
}