Cod sursa(job #2014254)

Utilizator Laura_CorneiLaura Maria Cornei Laura_Cornei Data 23 august 2017 12:28:46
Problema Subsir 2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 1.1 kb
#include <fstream>
#define nmax 5005
using namespace std;
fstream f1("subsir2.in", ios::in);
fstream f2("subsir2.out", ios::out);
int n, lmax;
long int v[nmax], s[nmax], lung[nmax], sol[nmax];
int cauta(int st, int dr, long int val)
{
    if(st<=dr)
    {
        int mijl=(st+dr)/2;
        if(val>= s[mijl]) return cauta(mijl+1, dr, val);
        else return cauta(st, mijl-1, val);
    }
    else return st;
}
void citire()
{
   int i, ind;
   f1>>n;
   for(i=1; i<=n; i++)
       {
            f1>>v[i];
            if(v[i]>= s[lmax])
            {
                lmax++;
                s[lmax]=v[i];
                lung[i]=lmax;
            }
            else
            {
               ind=cauta(1, lmax, v[i]);//in s
               s[ind]=v[i];
               lung[i]=ind;
            }
       }

}
void solutie()
{
    int i;
    for(i=n; i>=1; i--)
        if((!sol[lung[i]])|| (v[i]< v[sol[lung[i]]]) ) sol[lung[i]]=i;

    f2<<lmax<<"\n";
    for(i=1; i<=lmax; i++)
        f2<<sol[i]<<' ';
}
int main()
{
    citire();
    solutie();
    return 0;
}