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

/*
操作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. 爬虫处理网站的bug---小于号未转化为实体符

    1.发现BUG 爬取 chinadrugtrials 详情页的公示的试验信息时候, 发现程序在某些地方跑断掉了,如下: 经排查发现,原来这是网页的bug-----极少数详情页面的某些文字中的小于号,未 ...

  2. H5 localStorage sessionStorage

    localStorage 用于长久保存整个网站的数据,没有过期时间,除非手动去除. sessionStorage 会话存储,临时存储,当用户关闭浏览器窗口后,数据被删除. 共同方法 以 localSt ...

  3. liunx必知必会(2)

    一.SSH免密登陆配置 1.相关概念 SSH 为 Secure Shell(安全外壳协议) 的缩写. 很多ftp.pop和telnet在本质上都是不安全的,因为它们在网络上用明文传送口令和数据,别有用 ...

  4. 枚举专项练习_Uva725(Division)_Uva11059(Maximun Product)

    //Uva725 #include <iostream> #include <cstring> #include <cstdlib> #include <cs ...

  5. 启动与关闭comcat服务器

    1.找 comcat 安装目录 如 : E:\tomcat\apache-tomcat-7.0.64\bin 2.关闭comcat 服务 3.启动comcat服务

  6. 列表视图QlistView

    列表视图QlistView要配合setModel模型一起使用 例子一 QStringListModel()  字符串列表模型 import sys from PyQt5.QtWidgets impor ...

  7. Linux之Ubuntu无线网络配置

    无线网络使用问题: 0.插上有线网络电线与电脑NIC上. 1.set->系统设置->软件和更新->Ubuntu软件->下载自:   选择一个网络服务器地址(软件源)[http: ...

  8. The folder can’t be opened because you don’t have permission to see its contents.

    1 自己在windows上面copy过去的文件夹,在Mac下面无法查看 一开始以为是windows文件的权限问题,然后 自己赋予了everyone所有的权限,结果在Mac上面还是无法打开文件夹 2 最 ...

  9. Android APP常见的5类内存泄露及解决方法

    1.static变量引起的内存泄漏 因为static变量的生命周期是在类加载时开始 类卸载时结束,也就是说static变量是在程序进程死亡时才释放,如果在static变量中 引用了Activity 那 ...

  10. sklearn中的回归器性能评估方法(转)

    explained_variance_score() mean_absolute_error() mean_squared_error() r2_score() 以上四个函数的相同点: 这些函数都有一 ...