Pagini recente » Cod sursa (job #236647) | Cod sursa (job #3287512) | Cod sursa (job #3258042) | Cod sursa (job #1944683) | Cod sursa (job #3290165)
#include <fstream>
using namespace std;
ifstream cin("scmax.in");
ofstream cout("scmax.out");
int parinte[100001], best[100001], lmax = 0, v[100001];
int cautare(int i);
void afisare(int i);
int main()
{
int n;
cin>>n;
for(int i = 1; i <= n; ++i)
{
cin>>v[i];
int l = cautare(i);
best[l+1] = i;
parinte[i] = best[l];
lmax = max(lmax, l+1);
}
cout<<lmax<<"\n";
afisare(best[lmax]);
return 0;
}
void afisare(int i)
{
if(i != 0)
{
afisare(parinte[i]);
cout<<v[i]<<" ";
}
}
int cautare(int i)
{
int st = 0, dr = lmax, rez = 0;
while(st <= dr)
{
int mijl = (st + dr) / 2;
if(v[best[mijl]] < v[i])
{
st = mijl + 1;
rez = mijl;
}
else
{
dr = mijl - 1;
}
}
return rez;
}