#include <bits/stdc++.h>
using namespace std;
#define int long long
#define rep(i,a,b) for(int i = a; i <= b; i++)
#define per(i,a,b) for(int i = a; i >= b; i--)
#define pii pair<int,int>
#define pb push_back
#define fi first
#define se second
const int MAXN = 1e6+10;
const int INF = 1e18+10;
int a[MAXN], lf[MAXN], rg[MAXN], ans[MAXN];
int32_t main() {
ios_base::sync_with_stdio(0); cin.tie(nullptr);
int n,q;cin >> n >> q;
vector<pii> vals;
rep(i,1,n) {
cin >> a[i];
vals.pb({a[i],i});
}
stack<int> stk;
a[0] = INF, a[n+1] = INF;
stk.push(0);
rep(i,1,n) {
while (a[i] > a[stk.top()]) stk.pop();
lf[i] = stk.top();
stk.push(i);
}
while (!stk.empty())stk.pop();
stk.push(n+1);
per(i,n,1) {
while (a[i] >= a[stk.top()]) stk.pop();
rg[i] = stk.top();
stk.push(i);
}
vector<pii> qr;
rep(i,1,q) {
int x;cin >> x;
qr.push_back({x,i});
}
sort(qr.begin(), qr.end(), greater<pii>());
sort(vals.begin(), vals.end(),greater<pii>());
int id = 0, anss = 0;
for (auto &[x,i] : qr) {
while (id < n && vals[id].fi > x) {
int j = vals[id].se;
anss+= (rg[j]-j)*(j-lf[j]);
id++;
}
ans[i] = n*(n+1)/2 - anss;
}
rep(i,1,q) cout << ans[i] << '\n';
return 0;
}
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |
# | Verdict | Execution time | Memory | Grader output |
---|
Fetching results... |