Cod sursa(job #49990)

Utilizator flo_demonBunau Florin flo_demon Data 6 aprilie 2007 18:23:59
Problema Subsir 2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.97 kb
#include <stdio.h>

#define MAX 6000

int n, a[MAX], v[MAX];
int st, dr, mijl, L, last;
bool found;

int main()
{
    FILE *fin = fopen("subsir2.in", "r");
    fscanf(fin, "%d", &n);
    for (int i = 0; i < n; ++i)
        fscanf(fin, "%d", &a[i]);
    fclose(fin);
    
    L = 1;
    v[0] = 0;
    for (int i = 1; i < n; ++i)
    {
        if (a[i] > a[ v[L-1] ])
            v[L++] = i;
        else
        {
            st = 0;
            dr = L-1;
            while (st < dr)
            {
                mijl = (st + dr) >> 1;
                if (a[i] < a[ v[mijl] ])
                    dr = mijl;
                else
                    st = mijl+1;
            }
            if (a[ v[st-1] ] != a[i])
                v[st] = i;
        }
    }
    
    FILE *fout = fopen("subsir2.out", "w");
    fprintf(fout, "%d\n", L);
    for (int i = 0; i < L; ++i)
        fprintf(fout, "%d ", v[i]+1);
    fclose(fout);
    
    return 0;
}