Pagini recente » Cod sursa (job #1403844) | Cod sursa (job #903171) | Cod sursa (job #3038974) | Cod sursa (job #664382) | Cod sursa (job #3319437)
#include <iostream>
#include <fstream>
using namespace std;
ifstream fin("scmax.in");
ofstream fout("scmax.out");
const int N = 1e5;
const int INF = 2e9 + 1;
int v[N],val_min[N+1],lung[N-1];
int binar(int v[], int n, int val)
{
///pozitia ultimului element al lui v care e < val
int st=1, dr=n, rez=0;
while (st<=dr)
{
int m=(st+dr)/2;
if(v[m]<val)
{
rez=m;
st=m+1;
}
else
{
dr=m-1;
}
}
return rez;
}
int main()
{
int n;
fin>>n;
for(int i=0;i<n;i++)
{
fin>>v[i];
}
int n_val_min=0,i_max=0;
for(int i=0;i<n;i++)
{
int j=binar(val_min,n_val_min,v[i]);
if(j==n_val_min)
{
n_val_min++;
}
lung[i]=j+1;
val_min[j+1]=v[i];
if(lung[i]>lung[i_max])
{
i_max=i;
}
}
fout<<lung[i_max]<<"\n";
int f=lung[i_max];
long long val=INF;
for(int p=i_max;p>=0;p--)
{
if(lung[p]==f && v[p]<val)
{
fout<<v[p]<<" ";
f--;
}
if(f==0)
{
break;
}
}
fin.close();
fout.close();
}