제출 #1312552

#제출 시각아이디문제언어결과실행 시간메모리
1312552samarthkulkarniPilot (NOI19_pilot)C++20
100 / 100
264 ms54424 KiB
#include <bits/stdc++.h>
using namespace std;

using ll = long long;
#define vi vector<long long>
#define all(x) x.begin(), x.end()
#define endl "\n"

void solution();
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    solution();
    return 0;
}

const int N = 1e6+10;
ll a[N];
ll h[N];
ll cnt[N];
ll res[N];




void solution() {
    ll n, q; cin >> n >> q;
    vi temp(n);
    for (ll &z : temp) cin >> z;

    int id = 0;
    for (int i = 0; i < n; i++) {
        if (a[id] != temp[i]) a[++id] = temp[i];
        cnt[id]++;
    }

    n = id;
    a[0] = a[n+1] = 1e18;
    for (int i = 1; i < N; i++) cnt[i] += cnt[i-1];


    stack<int> hs;
    vi pg(n+1), ng(n+1);

    hs.push(0);
    for (int i = 1; i <= n; i++) {
        while (a[hs.top()] < a[i]) hs.pop();
        pg[i] = hs.top();
        hs.push(i);
    }

    while (!hs.empty()) hs.pop(); 

    hs.push(n+1);
    for (int i = n; i >= 1; i--) {
        while (a[hs.top()] <= a[i]) hs.pop();
        ng[i] = hs.top();
        hs.push(i);
    }



    auto val = [&](int i) { 
        ll l = cnt[i-1] - cnt[pg[i]];
        ll r = cnt[ng[i]-1] - cnt[i];

        ll m = cnt[i]-cnt[i-1];
        return l*r + l*m + r*m + m*(m+1)/2;
    };


    for (int i = 1; i <= n; i++) {
        res[a[i]] += val(i);
    }

    for (int i = 1; i < N; i++) res[i] += res[i-1];

    while (q--) {
        ll x; cin >> x;
        cout << res[x] << endl;
    }
}
#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...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...