General
 
 
# 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
→ Source
#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]);
}
	  	 	  	 		 	  	  	   					
?
Time: ? ms, memory: ? KB
Verdict: ?
Input
?
Participant's output
?
Jury's answer
?
Checker comment
?
Diagnostics
?
Click to see test details