Cod sursa(job #3172834)

Utilizator AndreeaDinuDinu Andreea Irina AndreeaDinu Data 21 noiembrie 2023 12:47:20
Problema Subsir crescator maximal Scor 50
Compilator cpp-64 Status done
Runda Arhiva educationala Marime 1.06 kb
#include <fstream>

using namespace std;
ifstream cin ("scmax.in");
ofstream cout ("scmax.out");

int A[100001], D[100001], P[100001], I[100001];
int main()
{
    int n, i, j, k;
    cin >> n;
    for ( i = 1; i <= n; i ++)
        cin >> A[i];
    k = 1;
    D[k] = A[1];
    P[1] = 1;
    for(int i = 2 ; i <= n ; i ++)
        if(A[i] > D[k])
        {
            D[++k] = A[i];
            P[i] = k;
        }
        else
        {
            int st = 1 , dr = k , p = k + 1;
            while(st <= dr)
            {
                int m = (st + dr) / 2;
                if(D[m] > A[i])
                {
                    p = m;
                    dr = m - 1;
                }
                else
                    st = m + 1;
            }
            D[p] = A[i];
            P[i] = p;
        }
        j = n;
    cout << k << "\n";
    for(int i = k ; i >= 1 ; i --)
    {
        while(P[j] != i)
        j --;
        I[i] = j;
    }
    for ( i = 1; i <= k; i ++)
        cout << I[i] << " ";
    return 0;
}