Submission #439009

#TimeUsernameProblemLanguageResultExecution timeMemory
439009skybergMountains (NOI20_mountains)C++17
79 / 100
131 ms5068 KiB
#include <iostream>
#include <vector>
#include <cstring>
#include <algorithm>
using namespace std;
long long int c[300000];
long long int mn[300000];
int t[100];
int main(){
    int n;
    cin >> n;
    long long int ans = 0;
    if(n >= 10005){
        cin >> c[0];
        if(c[0] >= 100){
            cout << 0;
            return 0;
        }
        t[c[0]]++;
        mn[0] = 0;
        for(int i = 1; i < n; i++){
            cin >> c[i];
            if(c[i] >= 100){
                cout << 0;
                return 0;
            }
            for(int j = 0; j < c[i]; j++){
                mn[i] += t[j];
            }
            t[c[i]]++;
        }
        memset(t, 0, sizeof(t[0])* 100);
        t[c[n - 1]]++;
        for(int i = n - 2; i >= 0; i--){
            long long int temp =0;
            for(int j = 0; j < c[i]; j++){
                temp += t[j];
            }
            ans += mn[i] * temp;
            t[c[i]]++;
        }
        cout << ans;
    }
    else{
        for(int i = 0; i < n; i++){
            cin >> c[i];
        }
        for(int i = 1; i < n - 1; i++){
            long long int a = 0, b = 0;
            for(int j = 0; j < i; j++){
                if(c[j] < c[i])a++;
            }
            for(int j = i + 1; j < n; j++){
                if(c[j] < c[i])b++;
            }
            ans += a * b;
        }
        cout << ans;
    }

    return 0;
}
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...