Cod sursa(job #966689)

Utilizator alex_HarryBabalau Alexandru alex_Harry Data 26 iunie 2013 14:23:05
Problema Aria Scor 0
Compilator cpp Status done
Runda Arhiva educationala Marime 1.92 kb
#include <fstream>
#include <algorithm>
using namespace std;
ifstream f("move.in");
ofstream g("move.out");
struct ArrMax{
int pred;
int best_size;
};
ArrMax DP[100002];
int N,Arr[100002];
bool result[100002];
void read()
{
    int i;
    f>>N;
    for(i=1;i<=N;i++)
    {
        f>>Arr[i];
    }
}
void scmax()
{
    int i,max_best=-1,poz_best=-1;
    DP[1].pred=0;
    DP[1].best_size=1;
    for(i=2;i<=N;i++)
    {
        int j=i-1,max=-1;
        while(j>=1)
        {
            if(Arr[j]<Arr[i])
            {
                if(max<DP[j].best_size+1)
                {
                    max=DP[j].best_size+1;
                    DP[i].best_size=DP[j].best_size+1;
                    DP[i].pred=j;
                }
            }
            j--;
        }
        if(max_best<max)
        {
            max_best=max;
            poz_best=i;
        }
    }
    i=poz_best;
    int k=0,counter=0;
    result[0]=1;
    while(i!=0)
    {
        result[i]=1;
        i=DP[i].pred;
        counter++;
    }
    g<<N-counter<<"\n";
}
/*int binary_search(int val)
{
    int mid,st=1,dr=N,poz;
    while(st<=dr)
    {
        mid=(st+dr)/2;
        if(Arr2[mid]==val)
        {
            poz=mid;
            break;
        }
        if(Arr2[mid]>val)
            dr=mid-1;
        if(Arr2[mid]<val)
            st=mid+1;
    }
    return(poz);
}*/

void Solve()
{
    int i=0,pozition,j=1;
    for(i=1;i<=N;i++)
        if(result[i]==0)
        {
            while(Arr[i]-j>0)
            {
                if(result[Arr[i]-j]==1)
                {
                    g<<Arr[i]<<" "<<Arr[i]-j<<"\n";
                    break;
                }
                j++;
            }
            if(Arr[i]-j==0)
                g<<Arr[i]<<" "<<0<<"\n";
            result[i]=1;
        }

}
int main()
{
    read();
    scmax();
    Solve();
    return 0;
}