#include<bits/stdc++.h>
#define int long long
#define pii pair<int , int>
using namespace std;
const int N = 1e6 + 1;
pii h[N];
vector<int> adj[N];
vector<pii> queries;
int n , q;
bool check[N];
long long ans[N];
long long res = 0;
struct DSU{
long long sz[N];
int par[N];
void init(void){
for(int i = 1 ; i <= n ; i++){
sz[i] = 1;
par[i] = i;
}
}
int find(int u){
if(u == par[u]) return u;
return par[u] = find(par[u]);
}
void joinset(int u , int v){
u = find(u);
v = find(v);
if(u == v) return;
if(sz[u] < sz[v]) swap(u , v);
res -= ((sz[u] + 1) * sz[u] / 2 + (sz[v] + 1) * (sz[v]) / 2);
sz[u] += sz[v];
par[v] = u;
res += (sz[u] + 1) * sz[u] / 2;
}
} dsu;
void solve(void){
cin >> n >> q;
for(int i = 1; i <= n ; i++){
cin >> h[i].first;
h[i].second = i;
}
for(int i = 1 ; i <= q ; i++){
int w; cin >> w;
queries.push_back(make_pair(w, i));
}
sort(h + 1 , h + n + 1);
sort(queries.begin() , queries.end());
dsu.init();
for(int i = 1 ; i <= n ; i++) check[i] = false;
int kquynh = 1;
for(int i = 0 ; i <= q - 1; i++){
while(kquynh <= n && h[kquynh].first <= queries[i].first){
int u = h[kquynh].second;
if (!check[u]) {
check[u] = true;
res += 1;
}
if (u > 1 && check[u-1]) dsu.joinset(u, u-1);
if (u < n && check[u+1]) dsu.joinset(u, u+1);
kquynh++;
}
ans[queries[i].second] = res;
}
for(int i = 1 ; i <= q ; i++) cout << ans[i] << endl;
}
signed main(void){
ios_base :: sync_with_stdio(false);
cin.tie(NULL);
cout.tie(NULL);
solve();
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... |