Cod sursa(job #1142060)

Utilizator DanyPrvPirvoaica Daniel DanyPrv Data 13 martie 2014 14:31:28
Problema Subsir crescator maximal Scor 10
Compilator cpp Status done
Runda Arhiva educationala Marime 0.97 kb
#include <fstream>
#define inf 2000000000
using namespace std;
ifstream f("scmax.in");
ofstream g("scmax.out");
int v[100001],p[100001],q[100001],MIN,n,i,j,x,st,dr,sol,mij,l,poz,k;
int main()
{
    f>>n>>v[1];
    p[1]=1;
    q[1]=v[1];
    q[0]=1;
    for(i=2;i<=n;i++){
        f>>v[i];
        st=1;
        dr=q[0];
        sol=0;
        while(st<=dr){
            mij=(st+dr)/2;
            if(q[mij]>=v[i]){
                sol=mij;
                dr=mij-1;
            }
            else
             st=mij+1;
        }
        if(sol!=0){
            q[mij]=v[i];
            p[i]=mij;
        }
        else
          {
              q[0]++;
              q[q[0]]=v[i];
              p[i]=q[0];
          }
    }
  g<<q[0]<<'\n';
  l=q[0];poz=n;
  for(i=poz;i>=1&&l>0;i--)
     if(p[i]==l)
         {
             q[++k]=i;
             l--;
             poz=i-1;
         }
   for(i=k;i>=1;i--)
     g<<v[q[i]]<<" ";
    return 0;
}