Cod sursa(job #677962)

Utilizator bacilaBacila Emilian bacila Data 10 februarie 2012 20:44:42
Problema Subsir crescator maximal Scor 50
Compilator cpp Status done
Runda Arhiva educationala Marime 0.68 kb
#include<algorithm>
#include <fstream>
using namespace std;
int n,a[100005],v[100005],k,st,dr,i;
int main ()
{ifstream f("scmax.in");
 ofstream g("scmax.out");
f>>n;
for(i=1;i<=n;i++)
f>>v[i];
for(i=1;i<=n;i++)
if(v[i]>a[k])
a[++k]=v[i];
else{
st=1; dr=k;
while(st<=dr)
if(a[(st+dr)/2]>v[i]&&a[(st+dr)/2-1]<v[i])
{a[(st+dr)/2]=v[i]; break;}
else
if(a[(st+dr)/2]>v[i]&&a[(st+dr)/2-1]>v[i])
dr=(st+dr)/2-1;
else
if(a[(st+dr)/2]<v[i]&&a[(st+dr)/2-1]<v[i])
st=(st+dr)/2+1;
else
break;
}st=k; a[k+1]=2<<30;
g<<k<<'\k';
for(i=n;i;i--)
if(v[i]>=a[k]&&v[i]<a[k+1]) {a[k]=v[i]; k--;
if(!k) break;}
for(i=1;i<=st;i++)
g<<a[i]<<" ";
 f.close(); g.close();
return 0;
}