Pagini recente » Cod sursa (job #1338562) | Cod sursa (job #2546067) | Cod sursa (job #1326077) | Cod sursa (job #442520) | Cod sursa (job #1378598)
#include <fstream>
#define lmax 100005
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int n,p;
int a[lmax],sol[lmax],prec[lmax];
int search(int x)
{
int st=1;
int dr=p;
while (st<dr)
{
int m=(st+dr)/2;
if (a[sol[m]]>=x)
dr=m;
else
st=m+1;
}
return st;
}
void write(int po)
{
if (prec[po])
write(prec[po]);
g<<a[po]<<" ";
}
int main()
{
f>>n;
for (int i=1;i<=n;i++)
{
f>>a[i];
if (a[i]>a[sol[p]])
{
p++;
sol[p]=i;
prec[i]=sol[p-1];
}
else
{
int poz=search(a[i]);
sol[poz]=i;
prec[i]=sol[poz-1];
}
}
g<<p<<'\n';
write(sol[p]);
f.close();
g.close();
}