?
# | Author | Problem | Lang | Verdict | Time | Memory | Sent | Judged | |
---|---|---|---|---|---|---|---|---|---|
138819005 |
Practice: Sparkle_Twilight |
1117G - 12 | C++20 (GCC 11-64) | Accepted | 1403 ms | 87152 KB | 2021-12-12 02:36:34 | 2021-12-12 02:36:35 |
#include<bits/stdc++.h> using namespace std; const int N=1001000; typedef long long ll; int n; void add(ll*a,int x,ll y){for(;x<=n;x+=x&-x)a[x]+=y;} ll gsm(ll*a,int x){ll ret=0;for(;x;x&=x-1)ret+=a[x];return ret;} ll sum0[N],sum1[N]; void mdf(int x,int y){add(sum0,x,y);add(sum1,x,(ll)(1-x)*y);} void modify(int l,int r,int x){mdf(l,x);if(r<n)mdf(r+1,-x);} ll query(int x){return gsm(sum0,x)*x+gsm(sum1,x);} vector<int>vec[N]; int q[N],l[N],r[N],a[N],m;ll ans[N]; void solve(){ for(int i=1;i<=m;++i)vec[l[i]].push_back(i);q[0]=n+1; for(int i=n,j=0;i;--i){ for(;j&&a[q[j]]<a[i];--j); modify(i,q[j]-1,1);q[++j]=i; for(int t:vec[i])ans[t]+=query(r[t]); } for(int i=1;i<=n;++i)vec[i].clear(),sum0[i]=sum1[i]=0; } int main(){ ios::sync_with_stdio(0);cin.tie(0);cout.tie(0); cin>>n>>m; for(int i=1;i<=n;++i)cin>>a[i]; for(int i=1;i<=m;++i)cin>>l[i]; for(int i=1;i<=m;++i)cin>>r[i]; solve(); for(int i=1;i<=m;++i)l[i]=n+1-l[i],r[i]=n+1-r[i],swap(l[i],r[i]);reverse(a+1,a+n+1); solve(); for(int i=1;i<=m;++i)ans[i]-=r[i]-l[i]+1,cout<<ans[i]<<" \n"[i==m]; return 0; }
?
?
?
?