# |
Author |
Problem |
Lang |
Verdict |
Time |
Memory |
Sent |
Judged |
|
255618807 |
Practice:
bkifhr7 |
1117G
- 12
|
C++14 (GCC 6-32)
|
Accepted
|
1733 ms
|
200640 KB
|
2024-04-08 15:52:53 |
2024-04-08 15:52:53 |
|
#include<bits/stdc++.h>
using namespace std;
const int N=2e6+5;
int n,q,t,a[N],l[N],r[N],S[N];
long long ans[N],d[N];
struct node {int x,y,z;}s[N];
bool cmp(node x,node y) {return x.x==y.x?(x.y==y.y?x.z<y.z:x.y<y.y):x.x<y.x;}
vector<int> tag[N];
struct BIT {
long long C[N];
void add(int x,int y) {x++;while(x<=n+5) C[x]+=y,x+=x&-x;}
long long sum(int x) {x++;long long res=0;while(x) res+=C[x],x-=x&-x;return res;}
}f,g,h,u,v;
int main() {
scanf("%d%d",&n,&q);a[0]=a[n+1]=n+1;
for(int i=1;i<=n;i++) scanf("%d",&a[i]);
S[t=1]=0;
for(int i=1;i<=n;i++) {
while(a[S[t]]<=a[i]) t--;
l[i]=S[t];S[++t]=i;
}
S[t=1]=n+1;
for(int i=n;i;i--) {
while(a[S[t]]<=a[i]) t--;
r[i]=S[t];S[++t]=i;
}
for(int i=1;i<=q;i++) scanf("%d",&s[i].y);
for(int i=1;i<=q;s[i].z=i,i++) scanf("%d",&s[i].x);
sort(s+1,s+q+1,cmp);
for (int i=1,j=1;i<=n;i++) {
for(int k:tag[i]) {
f.add(k,l[k]+1);
g.add(k,-1);
h.add(k,i-l[k]-1);
}
f.add(i,-l[i]-1);g.add(i,1);u.add(l[i],1);v.add(l[i],l[i]);
tag[r[i]].push_back(i);d[i]+=d[i-1]+l[i];
for(;j<=q&&s[j].x==i;j++) {
ans[s[j].z]+=h.sum(i)-h.sum(s[j].y-1)+f.sum(i)-f.sum(s[j].y-1);
ans[s[j].z]+=(g.sum(i)-g.sum(s[j].y-1))*(i+1);
ans[s[j].z]+=v.sum(s[j].y-1)-d[s[j].y-1];
ans[s[j].z]-=(u.sum(s[j].y-1)-(s[j].y-1))*(s[j].y-1);
}
}
for(int i=1;i<=q;i++) printf("%lld ",ans[i]);
}
Click to see test details