#include <bits/stdc++.h>
using namespace std;
#define int long long
int const N=3e5+10;
int c[N]={};
int ans[N]={};
vector<pair<int,int>>ind[N];
struct node
{
    int sm=0,vl=0,lazy=0;
};
node seg[4*N]={};
void push(int i,int st,int en)
{
    int mid=(st+en)/2;
    int s[2]={};
    s[0]=mid-st+1;
    s[1]=en-mid;
    for (int j=2*i;j<=2*i+1;j++)
    {
        seg[j].vl=seg[j].sm-s[j-2*i]*seg[i].lazy;
        seg[j].lazy=seg[i].lazy;
    }
    seg[i].lazy=-1;
}
void build(int i,int st,int en)
{
    seg[i].lazy=-1;
    if (st==en)
    {
        seg[i].sm=c[st];
        return;
    }
    int mid=(st+en)/2;
    build(i*2,st,mid);
    build(i*2+1,mid+1,en);
    seg[i].sm=seg[i*2].sm+seg[i*2+1].sm;
}
void update(int i,int st,int en,int l,int r,int val)
{
    if (st>=l&&en<=r)
    {
        seg[i].vl=seg[i].sm-(en-st+1)*val;
        seg[i].lazy=val;
        return;
    }
    if (st>r||en<l)
        return;
    if (seg[i].lazy!=-1)
        push(i,st,en);
    int mid=(st+en)/2;
    update(i*2,st,mid,l,r,val);update(i*2+1,mid+1,en,l,r,val);
    seg[i].vl=seg[i*2].vl+seg[i*2+1].vl;
}
int get(int i,int st,int en,int l,int r)
{
    if (st>=l&&en<=r)
        return seg[i].vl;
    if (st>r||en<l)
        return 0;
    if (seg[i].lazy!=-1)
        push(i,st,en);
    int mid=(st+en)/2;
    return get(i*2,st,mid,l,r)+get(i*2+1,mid+1,en,l,r);
}
inline void solve()
{
    int n,D;
    cin>>n>>D;
    c[0]=-1;
    for (int i=1;i<=n;i++)
        cin>>c[i];
    build(1,1,n);
    int q;
    cin>>q;
    for (int i=0;i<q;i++)
    {
        int l,r;
        cin>>l>>r;
        ind[r].push_back({l,i});
    }
    vector<int>z={0};
    for (int i=1;i<=n;i++)
    {
        while (z.size()&&c[z.back()]>c[i])
            z.pop_back();
        update(1,1,n,z.back()+1,i,c[i]);
        z.push_back(i);
        for (auto [l,inx]:ind[i])
            ans[inx]=get(1,1,n,l,i);
    }
    for (int i=0;i<q;i++)
        cout<<ans[i]<<endl;
}
signed main()
{
    ios_base::sync_with_stdio(false);cin.tie(NULL);cout.tie(NULL);
    int t=1;
    for (int i=1;i<=t;i++)
    {
        solve();
    }
}
| # | 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... |