#include<bits/stdc++.h>
using namespace std;
#define int long long
#define inf 5e18
#define nl '\n'
const int N = 1e6;
int p[N], sz[N];
int ans;
int find(int x){
return x == p[x] ? x : p[x] = find(p[x]);
}
void unite(int x, int y){
x = find(x);
y = find(y);
ans += sz[x] * sz[y];
if(sz[x] < sz[y]) swap(x, y);
sz[x] += sz[y];
p[y] = x;
}
inline void solve(){
int n, q;
cin>>n>>q;
int a[n];
vector<pair<int,int>> arr(n), qry(q);
for(int i=0; i<n; i++) cin>>a[i], arr[i] = {a[i], i};
for(int i=0; i<q; i++) cin>>qry[i].first, qry[i].second = i;
sort(arr.begin(), arr.end());
sort(qry.begin(), qry.end());
fill(sz, sz+n, 1);
iota(p, p+n, 0);
int fans[q];
for(int i=0, j=0; i<q; i++){
auto [qx, qi] = qry[i];
while(j < n and arr[j].first <= qx){
auto [x, ix] = arr[j];
ans++;
if(ix-1 >= 0 and a[ix-1] <= x) unite(ix-1, ix);
if(ix+1 < n and a[ix+1] <= x) unite(ix, ix+1);
j++;
}
fans[qi] = ans;
}
for(int i=0; i<q; i++) cout<<fans[i]<<nl;
}
signed main(){
ios_base::sync_with_stdio(0);
cin.tie(NULL);cout.tie(NULL);
int t = 1;
//cin>>t;
while(t--) 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... |