Pagini recente » Cod sursa (job #2596804) | Cod sursa (job #1236573) | Cod sursa (job #97691) | Cod sursa (job #1527072) | Cod sursa (job #1015588)
#include <fstream>
#include <iostream>
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int a[100000],l[100000],Max=0,Lmax=0,i,poz,poz1,n;
void cb(int st,int dr)
{int m=(st+dr)/2;
if(st==dr){if(a[st]<a[st+1] && l[st]>Max) Max=l[st];
else if(Max==1 && a[st]>a[st+1]) Max=0;
l[st+1]=Max+1;
if(Max==1 && st<poz) poz=st;
if(l[st+1]>Lmax) {Lmax=l[st+1]; poz1=poz;}}
else {cb(st,m);
cb(m+1,dr);}}
void afis()
{int x;
g<<Lmax<<endl;
g<<a[poz1]<<" ";
x=a[poz1];
for(int i=poz1+1;i<=n;i++)
if(a[i]>x && Lmax>0)
{Lmax--;
g<<a[i]<<" ";
x=a[i];}}
int main()
{f>>n; for(i=1;i<=n;i++) f>>a[i];
l[1]=1; poz=n;
cb(1,n);
afis();
return 0;
}