# [Educational Codeforces Round 171](https://codeforces.com/contest/2026)

1|0Educational Codeforces Round 171

1|1D. Sums of Segments

定义四个前缀和:

si=a1+a2++ai

ui=s1+s2++si

ti=s(i,i)+s(i,i+1)++s(i,n)

tsi=t1+t2++ti

siai的前缀和,uisi的前缀和,ti为分块之后第i块的和,tsiti的前缀和,也是分块之后的前缀和

b数组中第k块的个数是nk+1,前k块的总数为nkk(k1)2

由前k块的总数可以二分,定位到l,r的块数,假定分别x,y

此时和sum=tsytsx1,还需要减去在x,y块中多加的

此时需要求位置l,r在块中的第几个

设第l,r个元素是s(x,z),s(y,w),由于位置xnx(x1)2上的元素是s(x,n),则有

nz=xnx(x1)2l,可得:z=nxnx(x1)2+l

同理:w=nyny(y1)2+r

然后删去多出来的部分

对于第x块,位置ls(x,z),所以要去掉s(x,1)+s(x,2)++s(x,z1),即下图中红色部分,就可以用我们前面的前缀和求取,

蓝色梯形部分为:uz1ux

橙色矩形部分为:(xz)sx1

所以减去的红色部分为:uz1ux(xz)sx1

同理可得对于第y块,需要减去的部分为:unuw1(nw)sy1

代码如下:

#include <bits/stdc++.h> using namespace std; #define int long long #define inf 0x3f3f3f3f const int mod = 1e9 + 7; const int N = 3e5 + 10; const double eps = 1e-6; int n; int s[N],u[N],t[N],ts[N],a[N]; int x, y, q, l, r ,z ,w; void solve() { cin >> n; for(int i = 1 ; i <= n ; i ++){ cin >> a[i]; s[i] = s[i-1] + a[i]; u[i] = u[i-1] + s[i]; } for(int i = n ; i >= 1 ; i --) t[i] = t[i+1] + (n-i+1)*a[i]; for(int i = 1 ; i <= n ; i ++) ts[i] = ts[i-1] + t[i]; cin >> q; while(q--){ cin >> l >> r; int sum = 0; int L = 1, R = n; while(L != R){ int mid = (L + R) / 2; if(n*mid-mid*(mid-1)/2 < l) L = mid + 1; else R = mid; } x = L; L = 1 , R = n; while(L != R){ int mid = (L + R) / 2; if(n*mid-mid*(mid-1)/2 < r) L = mid + 1; else R = mid; } y = L; // cout << x << " " << y << " "; sum = ts[y] - ts[x-1]; z = n - (x*n -x*(x-1)/2 - l); w = n - (y*n -y*(y-1)/2 - r); sum -= u[z-1] - u[x-1] - (z-x)*s[x-1]; sum -= u[n]-u[w] -s[y-1]*(n-w); cout << sum << endl; } } signed main() { ios::sync_with_stdio(0); cin.tie(0), cout.tie(0); int _ = 1; // cin >> _ ; while (_--) solve(); return 0; }

__EOF__

本文作者xued
本文链接https://www.cnblogs.com/xdeyt/p/18516173.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   xde_yt  阅读(36)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 全网最简单!3分钟用满血DeepSeek R1开发一款AI智能客服,零代码轻松接入微信、公众号、小程
· .NET 10 首个预览版发布,跨平台开发与性能全面提升
· 《HelloGitHub》第 107 期
· 全程使用 AI 从 0 到 1 写了个小工具
· 从文本到图像:SSE 如何助力 AI 内容实时呈现?(Typescript篇)
点击右上角即可分享
微信分享提示