Cod sursa(job #1657514)

Utilizator DrumeaVDrumea Vasile DrumeaV Data 20 martie 2016 15:42:22
Problema Subsir 2 Scor 45
Compilator cpp Status done
Runda Arhiva de probleme Marime 0.84 kb
#include <stdio.h>
#include <algorithm>

using namespace std;

const int Mn = 1e5 + 6;

int n, ans;
int ar[Mn], seq[Mn], last[Mn];

int main()
{
    freopen("subsir2.in","r",stdin);
    freopen("subsir2.out","w",stdout);

    scanf("%d", &n);
    for (int i = 1; i <= n; i++)
    {
        scanf("%d", &ar[i]);
        int l = 1, r = ans;
        for (; l <= r;)
        {
            int m = (l + r) / 2;
            if (ar[seq[m]] < ar[i])
               l = m + 1;
          else
               r = m - 1;
        }

        last[i] = seq[l - 1];
        seq[l] = i;
        ans = max(ans, l);
    }

    n = seq[ans];
    for (int i = ans; i; i--, n = last[n])
        seq[i] = n;

    printf("%d\n", ans);
    for (int i = 1; i <= ans; i++)
        printf("%d ", seq[i]);

    printf("\n");
    return 0;
}