题目


分析

首先把收费站之间化为点,那这样即是区间加和区间查询,

考虑求的应该是

\[\frac{\sum a[i]*(r-i+1)*(i-l+1)}{C(r-l+2,2)}
\]

分子可以拆成

\[a[i]*(l+r)*i-a[i]*(r+1)*(l-1)-a[i]*i*i
\]

关键是要维护\(\sum a[i],\sum a[i]*i,\sum a[i]*i*i\)

这个可以用\(\sum i=(i+1)*i/2,\sum i^2=i*(i+1)*(2*i+1)/6\)实现


代码

#include <cstdio>
#include <cctype>
#include <algorithm>
#define rr register
using namespace std;
const int N=100011; typedef long long lll;
struct three{lll w0,w1,w2;}w[N<<2]; int lazy[N<<2],n;
inline signed iut(){
rr int ans=0,f=1; rr char c=getchar();
while (!isdigit(c)) f=(c=='-')?-f:f,c=getchar();
while (isdigit(c)) ans=(ans<<3)+(ans<<1)+(c^48),c=getchar();
return ans*f;
}
inline void print(lll ans){
if (ans>9) print(ans/10);
putchar(ans%10+48);
}
inline three pup(three k1,three k2){return (three){k1.w0+k2.w0,k1.w1+k2.w1,k1.w2+k2.w2};}
inline lll C(int n){return 1ll*n*(n-1)>>1;}
inline lll calc(int n){return 1ll*n*(n+1)*(n<<1|1)/6;}
inline void ptag(int k,int l,int r,int z){
w[k].w0+=(r-l+1)*z,w[k].w1+=(C(r+1)-C(l))*z,
w[k].w2+=(calc(r)-calc(l-1))*z,lazy[k]+=z;
}
inline void update(int k,int l,int r,int x,int y,int z){
if (l==x&&r==y){ptag(k,l,r,z); return;}
rr int mid=(l+r)>>1;
if (lazy[k]) ptag(k<<1,l,mid,lazy[k]),ptag(k<<1|1,mid+1,r,lazy[k]),lazy[k]=0;
if (y<=mid) update(k<<1,l,mid,x,y,z);
else if (x>mid) update(k<<1|1,mid+1,r,x,y,z);
else update(k<<1,l,mid,x,mid,z),update(k<<1|1,mid+1,r,mid+1,y,z);
w[k]=pup(w[k<<1],w[k<<1|1]);
}
inline three query(int k,int l,int r,int x,int y){
if (l==x&&r==y) return w[k];
rr int mid=(l+r)>>1;
if (lazy[k]) ptag(k<<1,l,mid,lazy[k]),ptag(k<<1|1,mid+1,r,lazy[k]),lazy[k]=0;
if (y<=mid) return query(k<<1,l,mid,x,y);
else if (x>mid) return query(k<<1|1,mid+1,r,x,y);
else return pup(query(k<<1,l,mid,x,mid),query(k<<1|1,mid+1,r,mid+1,y));
}
signed main(){
n=iut()-1;
for (rr int m=iut();m;--m){
rr char c=getchar();
while (!isalpha(c)) c=getchar();
rr int l=iut(),r=iut()-1;
if (l>r) continue;
if (c=='C') update(1,1,n,l,r,iut());
else if (c=='Q'){
rr three Ans=query(1,1,n,l,r);
rr lll ans=Ans.w0*(r+1)*(1-l)+Ans.w1*(l+r)-Ans.w2;
rr lll ans2=C(r-l+2),GCD=__gcd(ans,ans2);
print(ans/GCD),putchar('/'),print(ans2/GCD),putchar(10);
}
}
return 0;
}

#线段树#洛谷 2221 [HAOI2012]高速公路的更多相关文章

  1. 洛谷P2221 [HAOI2012]高速公路(线段树+概率期望)

    传送门 首先,答案等于$$ans=\sum_{i=l}^r\sum_{j=i}^r\frac{sum(i,j)}{C_{r-l+1}^2}$$ 也就是说所有情况的和除以总的情况数 因为这是一条链,我们 ...

  2. 洛谷P2221 [HAOI2012]高速公路

    线段树 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...

  3. 线段树 洛谷P3932 浮游大陆的68号岛

    P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...

  4. [线段树]洛谷P5278 算术天才⑨与等差数列

    题目描述 算术天才⑨非常喜欢和等差数列玩耍. 有一天,他给了你一个长度为n的序列,其中第i个数为a[i]. 他想考考你,每次他会给出询问l,r,k,问区间[l,r]内的数从小到大排序后能否形成公差为k ...

  5. 洛谷 P2221 [HAOI2012]高速公路

    链接: P2221 题意: 有 \(n(1\leq n\leq 10^5)\) 个点,从第 \(i(1\leq i< n)\) 个点向第 \(i+1\) 个点连有边.最初所有边长 \(v_i\) ...

  6. 区间连续长度的线段树——洛谷P2894 [USACO08FEB]酒店Hotel

    https://www.luogu.org/problem/P2894 #include<cstdio> #include<iostream> using namespace ...

  7. [Luogu 2221] HAOI2012 高速公路

    [Luogu 2221] HAOI2012 高速公路 比较容易看出的线段树题目. 由于等概率,期望便转化为 子集元素和/子集个数. 每一段l..r中,子集元素和为: \(\sum w_{i}(i-l+ ...

  8. 洛谷 P2220 [HAOI2012]容易题 数论

    洛谷 P2220 [HAOI2012]容易题 题目描述 为了使得大家高兴,小Q特意出个自认为的简单题(easy)来满足大家,这道简单题是描述如下: 有一个数列A已知对于所有的A[i]都是1~n的自然数 ...

  9. AC日记——校门外的树 洛谷 P1047

    题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0,1,2,……,L,都种 ...

  10. 带修主席树 洛谷2617 支持单点更新以及区间kth大查询

    题目链接:https://www.luogu.com.cn/problem/P2617 参考博客:https://blog.csdn.net/dreaming__ldx/article/details ...

随机推荐

  1. xadmin后台的安装及配置使用

    安装 pip install https://codeload.github.com/sshwsfc/xadmin/zip/django2 在settings.py中注册如下应用 INSTALLED_ ...

  2. queryset高级用法:select_related

    在提取某个模型的数据的同时,也提前将相关联的数据提取出来.比如提取文章数据,可以使用select_related将author信息提取出来,以后再次使用article.author的时候就不需要再次去 ...

  3. 【Azure 环境】自动化账号生成的时候怎么生成连接与证书

    问题描述 自动化账号生成的时候怎么生成连接与证书? 什么是自动化? Azure 自动化提供基于云的自动化和配置服务,用于支持 Azure 环境和非 Azure 环境之间的一致管理. Azure 自动化 ...

  4. 非正式全面解析 NebulaGraph 中 Session 管理

    NebulaGraph 论坛最近有些讨论帖,各种姿势来问 NebulaGraph Session 管理相关的事情,我寻思这也不是一个法子,还是来写一篇文章来讲述下 NebulaGraph 中的 Ses ...

  5. VSCode 配置 Spring Boot 项目开发环境

    神器IDEA在升级到2023之后越发卡顿, EDU邮箱也不能用了, 照现在这个JDK版本的升级速度, 神器不升级也不行, 需要开始物色替代品. 其它IDE我用得少, VSCode还是比较熟悉的, 可以 ...

  6. redisson分布式锁lua脚本翻译

    1.获取锁 lock入参:keys[1]:自定义锁的key  RLock lock = redissonClient.getLock(lockKey);argv[1]=锁的租期,默认30s  argv ...

  7. Djiango视图层和模型层

    Djiango 使用教程 目录 Djiango 使用教程 一. 视图层 1.1 HttpResponse,render,redirect 1.2 JsonResponse 1.3 form表单上传文件 ...

  8. class cl表示 汇聚 集合 ss表示 阴性 这里表示抽象

    class cl表示 汇聚 集合 ss表示 阴性 这里表示抽象

  9. PlatformIO+ESP32+Vscode+DS18B20温度传感器(一直输出-127)

    DS18B20一直输出-127 ?? 一.硬件连线 二.代码 三.遇到的问题 一.硬件连线 将相应的线接到ESP wroom 32 二.代码 先在PlatformIO的library添加onWire库 ...

  10. Ubuntu adb 报错:no permissions (missing udev rules? user is in the plugdev group);问题的解决办法

    问题重现: 确认: Android设备已连接PC Android设备已打开USB调试 zuo@zuo-ubuntu:/etc/udev/rules.d$ adb devices List of dev ...