和威威猫系列故事差不多,都是根据条件推出公式

/*
操作c a b d:a到b道路上的所有边权值加d
操作e a b:问a到b中包含的道路的平均权值
区间平均值=所有可能路径权值/所有路径数,
而路径数=len*(len+1)/2,那么只要求区间中所有路径的权值即可
对于属于路径[L,R]的路径[k,k+1](设为x路径),那么可推出有(K-L+1)(R-K)条路径经过x路径,则路径x对于[L,R]的贡献就是w[k]*(K-L+1)(R-K)
化简得seg[k]*(-k*k+(R+L-1)*k+R*(1-L)),那么只要维护一元二次式中k的三个系数即可 那么[L,R]中所有路径权值的和就是sum{seg[k] * (-k*k + (R-L+1)*k + R*(1-L)}
=-sum{seg[k]*k*k} + (R-L+1)sum{seg[k]*k} + R*(1-L)sum{seg[k]}
一颗线段树add维护区间累加的值,三颗线段sum1,sum2,sum3维护三个独立的sum,一颗二维mul线段树维护区间k*k,k,1的值(固定的)
另外将道路离散化成点[L,R]中的每个k可以对应[L,R-1]
*/
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
using namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define maxn 100005
ll sum[maxn<<],sumk[maxn<<],sumkk[maxn<<];
ll add[maxn<<],multi[maxn<<][];
int N,M;
ll S,SK,SKK;//分别是三个系数的和
inline void pushup(int rt){
sum[rt]=sum[rt<<]+sum[rt<<|];
sumk[rt]=sumk[rt<<]+sumk[rt<<|];
sumkk[rt]=sumkk[rt<<]+sumkk[rt<<|];
}
//区间每次加上Add都要进行更新,Add对每个sum的贡献量就是Add乘以multi
inline void maintain(int rt,ll Add){
sum[rt]+=multi[rt][]*Add;
sumk[rt]+=multi[rt][]*Add;
sumkk[rt]+=multi[rt][]*Add;
}
inline void pushdown(int rt){
if(add[rt]){
add[rt<<]+=add[rt];
add[rt<<|]+=add[rt];
maintain(rt<<,add[rt]);
maintain(rt<<|,add[rt]);
add[rt]=;
}
}
void build(int l,int r,int rt){
if(l==r){
sum[rt]=sumk[rt]=sumkk[rt]=;
add[rt]=;
multi[rt][]=;
multi[rt][]=(ll)r;
multi[rt][]=(ll)r*r;
return;
}
int m=l+r>>;
build(lson);
build(rson);
pushup(rt);
for(int i=;i<;i++)
multi[rt][i]=multi[rt<<][i]+multi[rt<<|][i]; }
void update(int L,int R,ll C,int l,int r,int rt){
if(L<=l && R>=r){
add[rt]+=C;
maintain(rt,C);
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m) update(L,R,C,lson);
if(R>m) update(L,R,C,rson);
pushup(rt);
}
//查询区间[L,R],求出区间[L,R]的三个sum分别是多少
void query(int L,int R,int l,int r,int rt){
if(L<=l && R>=r){
S+=sum[rt];
SK+=sumk[rt];
SKK+=sumkk[rt];
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m) query(L,R,lson);
if(R>m) query(L,R,rson);
} int main(){
while(scanf("%d%d",&N,&M)==){
build(,N,);
char s[];
for(int i=;i<=M;i++){
scanf("%s",s);
if(s[]=='c'){
int a,b,c;
scanf("%d%d%d",&a,&b,&c);
update(a,b-,(ll)c,,N,);
}
else {
int a,b;
scanf("%d%d",&a,&b);
S=(ll);
SK=(ll);
SKK=(ll);
query(a,b-,,N,);
double ans=-SKK+((ll)a+b-)*SK+(ll)b*(-a)*S;
ll tot=(ll)(b-a)*(b-a+)/;
printf("%.10f\n",ans/tot);
}
}
}
return ;
}

ural1855 线段树区间更新+推公式维护一元二次式的更多相关文章

  1. hdu 4031 attack 线段树区间更新

    Attack Time Limit: 5000/3000 MS (Java/Others)    Memory Limit: 65768/65768 K (Java/Others)Total Subm ...

  2. hdu 3966(树链剖分+线段树区间更新)

    传送门:Problem 3966 https://www.cnblogs.com/violet-acmer/p/9711441.html 学习资料: [1]线段树区间更新:https://blog.c ...

  3. LCIS线段树(区间更新)

    首先线段树每一个节点包含:[b,e],lmax,rmax,max;其中lmax表示从左端点开始连续的最长的增序列长度,rmax表示从e端点开始向左连续的最长下降序列长度,max表示当前区间的连续递增的 ...

  4. hdu6070(分数规划/二分+线段树区间更新,区间最值)

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=6070 题意: 给出一个题目提交序列, 从中选出一个正确率最小的子串. 选中的子串中每个题目当且仅当最 ...

  5. POJ-2528 Mayor's posters(线段树区间更新+离散化)

    http://poj.org/problem?id=2528 https://www.luogu.org/problem/UVA10587 Description The citizens of By ...

  6. HDU 1556 Color the ball(线段树区间更新)

    Color the ball 我真的该认真的复习一下以前没懂的知识了,今天看了一下线段树,以前只会用模板,现在看懂了之后,发现还有这么多巧妙的地方,好厉害啊 所以就应该尽量搞懂 弄明白每个知识点 [题 ...

  7. hihoCoder 1080 : 更为复杂的买卖房屋姿势 线段树区间更新

    #1080 : 更为复杂的买卖房屋姿势 时间限制:10000ms 单点时限:1000ms 内存限制:256MB 描述 小Hi和小Ho都是游戏迷,“模拟都市”是他们非常喜欢的一个游戏,在这个游戏里面他们 ...

  8. HDU 5023 A Corrupt Mayor's Performance Art(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5023 解题报告:一面墙长度为n,有N个单元,每个单元编号从1到n,墙的初始的颜色是2,一共有30种颜色 ...

  9. HDU 4902 Nice boat 2014杭电多校训练赛第四场F题(线段树区间更新)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4902 解题报告:输入一个序列,然后有q次操作,操作有两种,第一种是把区间 (l,r) 变成x,第二种是 ...

随机推荐

  1. Java_myBatis_XML代理_动态SQL

    主要是设计到映射文件的编写: SELECT: <sql id="query_user_where"> <!-- test里面可以编写OGNL表达式 --> ...

  2. 6、Python-元组

    定义 # Python的元组与列表类似,不同之处在于元组的元素不能修改.元组使用小括号,列表使用方括号. aTuple = ('et',77,99.9) print(aTuple) 元组的操作 aTu ...

  3. Hive记录-配置支持事务管理hive-site.xml

    <property> <name>hive.support.concurrency</name> <value>true</value> & ...

  4. 用java发邮件之一 (直接源于真实项目) 【原】

    真实项目应用的java发送邮件,应该还待进一步完善. 依赖 mail-1.4.jar jar包下载地址: http://mvnrepository.com/artifact/javax.mail/ma ...

  5. UVALive - 3266 Tian Ji -- The Horse Racing(贪心)

    题目链接 题意 两人赛马,每居获胜得200,平局无事发生,输了也输200.求最优的策略使赢的钱最多. 分析 排序,从最快的开始比,若比不过,则用最弱的消耗最强的.模拟即可. #include<i ...

  6. Java编程思想 学习笔记3

    三.操作符 1.优先级 当一个表达式中存在多个操作符时,操作符的优先级就决定了各部分的计算顺序.程序员常常忘记其他优先级规则,所以应该用括号明确规定计算顺序. 当编译器观察到一个String后面紧跟着 ...

  7. ps知识集锦

    1.工具箱   移动工具 [V]矩形.椭圆选框工具 [M]套索.多边形套索.磁性套索 [L]快速选择工具.魔棒工具 [W] 裁剪.透视裁剪.切片.切片选择工具 [C]吸管.颜色取样器.标尺.注释.12 ...

  8. Java面试题系列(三)Java new一个对象的过程中发生了什么

    Person class Person{ private String name; private int age; public Person() { super(); } public Perso ...

  9. PWA,SPA,MPA

    PWA渐进式应用 特点: 不会部署到应用商店. 离线应用,通过设备进行存储规划 在发布了pwa的网站,浏览器会询问是否安装app到主屏. 方便分享,通过url. 可推送通知 . 通过service w ...

  10. proxysql 系列 ~ 总揽概括

    一 简介: proxysql相关知识汇总 二 proxysql 相关报错    1 proxysql 报错 too many connections     分析 proxysql关于连接池的参数  ...