Cod sursa(job #1709500)

Utilizator UPB_CodeJunkiesUPB NAIDEN NICOLICIOIU COTET UPB_CodeJunkies Data 28 mai 2016 12:38:17
Problema Twoton Scor 100
Compilator cpp Status done
Runda ONIS 2016 - Runda - 2 - ACM ICPC Romanian Programming Contest Marime 0.85 kb
#include <bits/stdc++.h>

using namespace std;
const int NMAX = 1000026;

ifstream fin("twoton.in");
ofstream fout("twoton.out");

int n;
int a[NMAX];
int d[NMAX];
int count = 0;
int mini = 0x3f3f3f3f;
int MOD = 19997;

int minix[NMAX];
int mark[NMAX];

int wtf(int i)
{
    if(mark[i] == 1)
        return minix[i];

    mark[i] = 1;
    if( i == n) {
        d[n] = 1;
        mark[n] = 1;
        minix[n] = a[n];
        return a[n];
    }
    if(a[i] < wtf(i + 1)) {

        d[i] = (1LL* d[i + 1] + 1) % MOD;
        minix[i] = a[i];
        return a[i];
    } else {
        minix[i] = wtf(i + 1);
        d[i] =  (1LL*d[i + 1] * 2 + 1 ) % MOD;
        return minix[i];
    }
}

int main()
{
    fin >> n;
    for(int i = 1; i <= n; ++i)
        fin >> a[i];
    wtf(1);


    fout << d[1] << '\n';
    return 0;
}