#include <bits/stdc++.h>
using namespace std;
#define endl "\n"
#define int long long
#define pii pair<int, int>
#define ff first
#define ss second
#define entire(x) (x).begin(), (x).end()
struct DSU{
int n, cnt = 0;
vector<bool> vis;
vector<int> parent, sz;
DSU (int n) : n(n) {
sz.resize(n, 1); vis.resize(n, false);
parent.resize(n); iota(entire(parent), 0ll);
}
int pi (int u){
return (parent[u] == u) ? u : (parent[u] = pi(parent[u]));
}
int two (int N) {
return (N * (N + 1)) / 2;
};
void merge (int u, int v){
u = pi(u); v = pi(v);
if (u == v) {
cnt -= two(sz[u]) * vis[u] - two(sz[u]); vis[u] = true; return;
}
if (sz[u] < sz[v]) swap(u, v);
int delta = two(sz[u]) * vis[u] + two(sz[v]) * vis[v];
vis[u] = vis[v] = true; parent[v] = u; sz[u] += sz[v];
delta -= two(sz[u]); cnt -= delta;
}
};
int32_t main(){
ios::sync_with_stdio(false); cin.tie(nullptr);
int n, q; cin >> n >> q;
vector<int> h(n);
vector<pii> a(n);
for (int i = 0; i < n; i++) cin >> a[i].ff, a[i].ss = i, h[i] = a[i].ff;
vector<pii> qn(q);
for (int i = 0; i < q; i++) cin >> qn[i].ff, qn[i].ss = i;
sort(entire(qn)); sort(entire(a));
DSU dsu(n);
auto add = [&](int idx){
dsu.merge(idx, idx);
if (0 < idx and dsu.vis[idx-1]) dsu.merge(idx, idx-1);
if (idx < n-1 and dsu.vis[idx+1]) dsu.merge(idx, idx+1);
};
int i = 0;
vector<int> ans(q, 0);
for (auto [lim, idx] : qn){
while (i < n and a[i].ff <= lim) add(a[i].ss), i++;
ans[idx] = dsu.cnt;
}
for (auto num : ans) cout << num << " ";
cout << endl;
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... |