! BJOI2018链上二次求和
此题实际就是序列上的问题(只是链的话不一定 \(u<v\) ,判一下) \(ans=\sum_{i=l}^r\sum_{j=i}^ns_j-s_{j-i}=\sum_{i=l}^r(\sum_{j=i}^ns_j-\sum_{j=0}^{n-i}s_j)\) 改成二维前缀和 \(ans=\sum^r_{i=l}ss_n-ss_{i-1}-ss_{n-i}\) 用线段树维护二维前缀和即可(肯定是一个二次函数,拆开算贡献即可) 时间复杂度 \(O(nlog_n)\) #include<bits/stdc++.h> using namespace std; inline int read(){ int x=0,f=1;char c=getchar(); while(!isdigit(c)){if(c=='-')f=-1;c=getchar();} while(isdigit(c)){x=(x<<1)+(x<<3)+(c^48);c=getchar();} return f==1?x:-x; } #define ll long long #define lc (p<<1) #define rc (p<<1|1) const int N=2e5+4,mod=1e9+7,inv2=5e8+4; int n,m,a[N],la[N<<2],lb[N<<2],le[N<<2],t[N<<2]