Cod sursa(job #1709066)

Utilizator linia_intaiConstantinescu Iordache Ciobanu Noi cei din linia intai linia_intai Data 28 mai 2016 10:46:23
Problema Twoton Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 1.01 kb
#include <fstream>
#include <algorithm>

using namespace std;

const int NMAX = 1000024;

int n;
int a[NMAX];
int b[NMAX];

const int MOD = 19997;

bool memo[NMAX];
int dp[NMAX];

int wtf(int i) {
    if (i == n - 1)
        return 1;

    if (memo[i])
        return dp[i];
    memo[i] = true;

    dp[i] = 1;
    if (b[i] < a[i + 1]) {
        dp[i] += wtf(i + 1);
        if (dp[i] >= MOD)
            dp[i] -= MOD;
    }
    else {
        dp[i] += 2 * wtf(i + 1);
        while (dp[i] >= MOD)
            dp[i] -= MOD;
    }

    return dp[i];
}

int main()
{
    ifstream cin("twoton.in");
    ofstream cout("twoton.out");

    cin >> n;
    for (int i = 0; i < n; ++ i) {
        cin >> a[i];
        b[i] = a[i];
    }

    for (int i = n - 2; i >= 0; -- i)
        a[i] = min(a[i], a[i + 1]);

    //for (int i = 0; i < n; ++ i)
    //    cout << a[i] << ' ';
    //cout << endl;

    cout << wtf(0) << '\n';

    cin.close();
    cout.close();
    return 0;
}