Submission #1352674

#TimeUsernameProblemLanguageResultExecution timeMemory
1352674hyyhMountains (NOI20_mountains)C++20
2 / 100
29 ms5808 KiB
#include <iostream>
#include <math.h>
#include <vector>
#include <string>
#include <algorithm>
#include <queue>
#include <stack>
#include <map>
#include <cstring>
#include <iomanip>
#include <set>
#include <bitset>
#include <unordered_map>

using namespace std;
using ll = long long;
using pii = pair<int,int>;
using piii = tuple<int,int,int>;
#define f first
#define s second
#define endl '\n'
#define all(x) begin(x),end(x)

int const N = 2e5+10;

int fenwick[N];
int si;

void update(int n,int val){
    for(;n <= si;n += n&-n) fenwick[n] += val;
}

int query(int n){
    int sum = 0;
    for(;n > 0;n -= n&-n) sum += fenwick[n];
    return sum;
}

int main(){
    int n;cin >> n;
    vector<int> coor;
    vector<int> vc;
    vector<int> left;
    for(int i{};i < n;i++){
        int g;cin >> g;
        vc.emplace_back(g);
        coor.emplace_back(g);
    }
    sort(all(coor));
    coor.erase(unique(all(coor)),coor.end());
    si = coor.size()+1;
    int ans = 0;
    for(int i{};i < n;i++){
        vc[i] = lower_bound(all(coor),vc[i])-coor.begin()+1;
        update(vc[i]+1,1);
        left.emplace_back(query(vc[i]));
    }
    for(int i{};i <= si;i++){
        fenwick[i] = 0;
    }
    for(int i{n-1};i >= 0;i--){
        update(vc[i]+1,1);
        ans += left[i]*query(vc[i]);
    }
    cout << ans;
}
#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...