#include<bits/stdc++.h>
#define int long long
using namespace std;
const int N = 1e6+5;
int n,q,ans[N];
pair<int,int> a[N],b[N];
struct Node{
int L,R,s;
} st[4*N];
void update(int id,int l,int r,int i,int v)
{
if(i < l or i > r)
return;
if(l == r)
{
st[id].L = 1;
st[id].R = 1;
st[id].s = 1;
return;
}
int mid = (l+r)/2;
update(2*id,l,mid,i,v);
update(2*id+1,mid+1,r,i,v);
st[id].s = st[2*id].s + st[2*id+1].s;
if(st[2*id].R > 0 and st[2*id+1].L > 0)
{
int v = st[2*id].R + st[2*id+1].L ;
int x = st[2*id].R ,y = st[2*id+1].L;
st[id].s = st[id].s + v*(v+1)/2 - x*(x+1)/2 - y*(y+1)/2;
}
if(st[2*id].L == (mid-l+1))
st[id].L = st[2*id].L + st[2*id+1].L;
else
st[id].L = st[2*id].L;
if(st[2*id+1].R == (r-mid))
st[id].R = st[2*id+1].R + st[2*id].R;
else
st[id].R = st[2*id+1].R;
}
signed main()
{
ios::sync_with_stdio(0); cin.tie(0); cout.tie(0);
cin>>n>>q;
for(int i = 1;i <= n;i++)
{
cin>>a[i].first;
a[i].second = i;
}
for(int i = 1;i <= q;i++)
{
cin>>b[i].first;
b[i].second = i;
}
sort(a+1,a+1+n);
sort(b+1,b+1+q);
int l = 1;
for(int i = 1;i <= q;i++)
{
while(a[l].first <= b[i].first)
{
update(1,1,n,a[l].second,1);
l++;
}
ans[b[i].second] = st[1].s;
}
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... |