#include<bits/stdc++.h>
using namespace std;
#define int long long
#define pii pair<int,int>
#define fi first
#define se second
const int N = 1e6+5;
int n,q,ans[N],par[N],sz[N],check[N],res = 0;
pii qr[N],h[N];
void init(){
for(int i = 1; i <= n; i++) par[i] = i;
}
int find(int u){
if(u == par[u]) return u;
return par[u] = find(par[u]);
}
void join(int u, int v){
u = find(u);
v = find(v);
res -= sz[u]*(sz[u]+1)/2;
res -= sz[v]*(sz[v]+1)/2;
sz[u] += sz[v];
par[v] = u;
res += sz[u]*(sz[u]+1)/2;
}
signed main(){
ios_base::sync_with_stdio(false);
cin.tie(NULL);
cin >> n >> q;
for(int i = 1; i <= n; i++){
cin >> h[i].fi;
h[i].se = i;
}
for(int i = 1; i <= q; i++){
cin >> qr[i].fi;
qr[i].se = i;
}
sort(h+1,h+n+1);
sort(qr+1,qr+q+1);
init();
int cur = 1;
for(int i = 1; i <= q; i++){
while(cur <= n && h[cur].fi <= qr[i].fi){
sz[h[cur].se] = 1;
res++;
if(h[cur].se > 1 && check[h[cur].se-1]) join(h[cur].se,h[cur].se-1);
if(h[cur].se < n && check[h[cur].se+1]) join(h[cur].se,h[cur].se+1);
check[h[cur].se] = 1;
cur++;
}
ans[qr[i].se] = res;
}
for(int i = 1; i <= q; i++) cout << ans[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... |