#include <bits/stdc++.h>
using namespace std;
#define int long long
#define fi first
#define se second
#define pii pair<int,int>
#define inp(name) freopen(name, "r", stdin);
#define out(name) freopen(name, "w", stdout);
const int N = 1e6 + 5;
const int mod = 998244353;
int n, q, ans = 0;
pii h[N], x[N];
int par[N], sz[N], res[N], ok[N];
int find(int u){
if (par[u] == u) return u;
return par[u] = find(par[u]);
}
void add(int u, int v){
u = find(u), v = find(v);
if (u == v) return;
par[u] = v;
ans -= (sz[u] + 1) * sz[u]/2;
ans -= (sz[v] + 1) * sz[v]/2;
sz[v] += sz[u];
ans += (sz[v] + 1) * sz[v]/2;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(0);
cout.tie(0);
cin >> n >> q;
for (int i = 1; i <= n; i ++){
cin >> h[i].fi;
h[i].se = i;
par[i] = i; sz[i] = 1;
}
for (int i = 1; i <= q; i ++){
cin >> x[i].fi;
x[i].se = i;
}
sort(h + 1, h + n + 1);
sort(x + 1, x + q + 1);
int j = 1;
for (int i = 1; i <= q; i ++){
while (j <= n && h[j].fi <= x[i].fi){
ans += 1;
if (ok[h[j].se - 1]) add(h[j].se - 1, h[j].se);
if (ok[h[j].se + 1]) add(h[j].se + 1, h[j].se);
ok[h[j].se] = 1;
j ++;
}
res[x[i].se] = ans;
}
for (int i = 1; i <= q; i ++) cout << res[i] << '\n';
}
# | 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... |