제출 #624234

#제출 시각아이디문제언어결과실행 시간메모리
624234PoonYaPatPilot (NOI19_pilot)C++14
100 / 100
658 ms83600 KiB
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;

int n,qu,pre[1000001],pos[1000001],c[1000001];
ll ans[1000001],sum;
vector<int> h[1000001];

ll cal(ll x) {
    return x*(x+1)/2;
}

int main() {
    ios_base::sync_with_stdio(0); cin.tie(0);
    cin>>n>>qu;

    for (int i=1; i<=n; ++i) {
        cin>>c[i];
        h[c[i]].push_back(i);
    }

    for (int i=1; i<=n; ++i) {
        int idx=i-1;
        while (c[i]>c[idx] && idx>=1) idx=pre[idx];
        pre[i]=idx;
    }

    for (int i=n; i>=1; --i) {
        int idx=i+1;
        while (c[i]>=c[idx] && idx<=n) idx=pos[idx];
        pos[i]=idx;
    }

    sum=cal(n);
    for (int i=1000000; i>0; --i) {
        ans[i]=sum;
        for (auto j : h[i]) {
            int r=pos[j], l=pre[j];
            sum-=cal(r-l-1);
            sum+=cal(j-l-1);
            sum+=cal(r-j-1);
        }
    }
    for (int i=1; i<=qu; ++i) {
        int x; cin>>x;
        cout<<ans[x]<<"\n";
    }
}
#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...