#include <bits/stdc++.h>
using namespace std;
#define fi first
#define se second
typedef long long ll;
const ll maxn = 1e5+10;
pair<ll,ll> h[maxn];
vector<pair<ll,ll>> rgs;
pair<ll,ll> p[maxn];
void rem(ll idx ){
ll l = 0, r = rgs.size()-1;
ll m;
while (true){
m = (l+r)/2;
if (rgs[m].fi <= idx && idx < rgs[m].se) break;
if (rgs[m].fi<idx){
l = m+1;
} else r = m-1;
}
pair<ll,ll> range = rgs[m];
if (range.fi == idx){
rgs[m].fi = idx+1;
} else if (range.se == idx){
rgs[m].se = idx-1;
} else{
rgs.insert(rgs.begin()+m+1,{idx+1,rgs[m].se});
rgs[m].se = idx;
}
}
signed main(){
cin.tie(0);cout.tie(0);ios_base::sync_with_stdio(false);
ll n,q;cin>>n>>q;
for (ll i = 0;i<n;i++){
ll hgt;cin>>hgt;
h[i] = {hgt,i};
}
rgs.push_back({0,n});
sort(h,h+n,greater<pair<ll,ll>>());
reverse(h,h+n);
// for (ll i = 0;i<n;i++){
// cout<<h[i].fi<<h[i].se<<endl;
// }
ll maxh = n, curr = 0;
for (ll i = 0;i<q;i++){
ll pl;cin>>pl;
p[i] = {pl,i};
}
sort(p,p+q,greater<pair<ll,ll>>());
for (ll i = 0;i<q;i++){
ll plane = p[i].fi, ord = p[i].se;
while (h[curr].fi > plane){
// cout<<"removing"<<h[curr].fi<<h[curr].se<<endl;
rem(h[curr].se);
curr++;
}
ll total = 0;
for (auto range:rgs){
// cout<<"range"<<range.fi<<' '<<range.se<<endl;
ll diff = range.se - range.fi;
total += diff*(diff+1)/2;
}
p[i] = {ord, total};
}
sort(p,p+q);
for (ll i = 0;i<q;i++)cout<<p[i].se<<endl;
}
# | 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... |