http://172.20.6.3/Problem_Show.asp?id=1527

日常线段树的pushdown写挂,果然每次写都想得不全面,以后要注意啊……
求期望部分也不熟练,和平均数搞混也是orz,我已经是个期望都求不出来的废人了。
这道题显然(大概)每个段的贡献是val[i]*(y-i+1)*(i-x+1);
整体来说算是一看就是线段树的题。

代码

 #include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
#include<queue>
using namespace std;
#define lc x*2
#define rc x*2+1
const int maxn=<<;
long long n,m;char ch[]={};
struct seg{
long long l,r,v,w,v1,v2,w1,w2;
seg(){l=r=v1=v2=w1=w2=v=w=;}
}e[maxn];
long long v1,v2,v3;
void pushdown(long long x,long long v){
if(v!=){
long long siz=e[x].r-e[x].l+;
e[x].v+=siz*v;
e[x].w1+=e[x].v1*v;
e[x].w2+=e[x].v2*v;
e[x].w+=v;
}
}
void doit(long long x){
pushdown(lc,e[x].w);
pushdown(rc,e[x].w);
e[x].w=;
}
void pushup(long long x){
if(e[x].l<e[x].r){
e[x].v=e[lc].v+e[rc].v;
e[x].w1=e[lc].w1+e[rc].w1;
e[x].w2=e[lc].w2+e[rc].w2;
}
}
void cha(long long x,long long l,long long r,long long w){
if(l<=e[x].l&&e[x].r<=r){
pushdown(x,w);
return;
}doit(x);
long long mid=(e[x].l+e[x].r)/;
if(l<=mid)cha(lc,l,r,w);
if(r>mid)cha(rc,l,r,w);
pushup(x);
}
void sum(long long x,long long l,long long r){
if(l<=e[x].l&&e[x].r<=r){
v1+=e[x].v;v2+=e[x].w1;v3+=e[x].w2;
return;
}doit(x);
long long mid=(e[x].l+e[x].r)/;
if(l<=mid)sum(lc,l,r);
if(r>mid)sum(rc,l,r);
pushup(x);
}
void build(long long x,long long l,long long r){
e[x].l=l;e[x].r=r;
if(l==r){
e[x].v1=l;e[x].v2=l*l;return;
}
long long mid=(l+r)/;
build(lc,l,mid);
build(rc,mid+,r);
e[x].v1=e[lc].v1+e[rc].v1;e[x].v2=e[lc].v2+e[rc].v2;
}
long long gcd(long long x,long long y){
while(y){
long long w=y;y=x%y;x=w;
}
return x;
}
int main(){
build(,,<<);
scanf("%I64d%I64d",&n,&m);
long long x,y,v;
for(int i=;i<=m;i++){
scanf("%s",&ch);
if(ch[]=='C'){
scanf("%I64d%I64d%I64d",&x,&y,&v);
cha(,x,y-,v);
}
else{
scanf("%I64d%I64d",&x,&y);
v1=v2=v3=;sum(,x,y-);
long long ans=v1*(y-x*y)+v2*(x+y-)-v3;
long long z=y-x;long long zong=z*(z+)/;
long long w=gcd(ans,zong);
printf("%I64d/%I64d\n",ans/w,zong/w);
}
}
return ;
}

JZYZOJ1527 [haoi2012]高速公路 线段树 期望的更多相关文章

  1. BZOJ 2752: [HAOI2012]高速公路(road) [线段树 期望]

    2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1219  Solved: 446[Submit] ...

  2. BZOJ2752: [HAOI2012]高速公路(road)(线段树 期望)

    Time Limit: 20 Sec  Memory Limit: 128 MBSubmit: 1820  Solved: 736[Submit][Status][Discuss] Descripti ...

  3. CF895 E. Eyes Closed(线段树 期望)

    题意 Sol 今天考试的T3,,我本来留了一个小时去写.但是T2一刚就刚了两个小时 最后也没来的及写.. 然后考完 开始写,,25min就A了.. 感觉自己太高估自己的思维,太低估自己的码力了... ...

  4. [CF895E] Eyes Closed(线段树,期望)

    Desctiption 传送门:Portal 大致题意: 给你一个序列, 支持两种操作: 1 l1 r1 l2 y2 在\([l1, r1]\)随机选择一个数a, \([l2, r2]\) 内随机选择 ...

  5. BZOJ 4262 线段树+期望

    思路: 把询问离线下来,查询max和查询min相似,现在只考虑查询max 令sum[l,r,x]表示l到r内的数为左端点,x为右端点的区间询问的答案 那么询问就是sun[l1,r1,r2]-sum[l ...

  6. 洛谷P3924 康娜的线段树(期望 前缀和)

    题意 题目链接 Sol 思路就是根据期望的线性性直接拿前缀和算贡献.. 这题输出的时候是不需要约分的qwq 如果你和我一样为了AC不追求效率的话直接#define int __int128就行了.. ...

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

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

  8. BZOJ 2752: [HAOI2012]高速公路(road)( 线段树 )

    对于询问[L, R], 我们直接考虑每个p(L≤p≤R)的贡献,可以得到 然后化简一下得到 这样就可以很方便地用线段树, 维护一个p, p*vp, p*(p+1)*vp就可以了 ----------- ...

  9. BZOJ 2752:[HAOI2012]高速公路(road)(线段树)

    [HAOI2012]高速公路(road) Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y ...

随机推荐

  1. 【BZOJ】1731: [Usaco2005 dec]Layout 排队布局

    [题意]给定按编号顺序站成一排的牛,给定一些约束条件如两牛距离不小于或不大于某个值,求1和n的最大距离.无解输出-1,无穷解输出-2. [算法]差分约束+最短路 [题解]图中有三个约束条件,依次分析: ...

  2. JS 控制页面刷新

    .页面自动刷新:把如下代码加入<head>区域中 <meta http-equiv=">,其中20指每隔20秒刷新一次页面. .页面自动跳转:把如下代码加入<h ...

  3. python中的Queue模块

    queue介绍 queue是python的标准库,俗称队列.可以直接import引用,在python2.x中,模块名为Queue.python3直接queue即可 在python中,多个线程之间的数据 ...

  4. linux指令和文件系统

    linux root用户的主目录是 /root , 其余用户在 /home 中: tar 常用 tar -zxvf : 安装使用 yum or wget website: mv a.g b.g 重命名 ...

  5. System.getProperty方法中输出路径的方法

    package codegenerator;/** *@author Eilen *@date 2017年9月27日---下午3:15:09 *@描述: *@answer */public class ...

  6. 1.Python3标准库--前戏

    Python有一个很大的优势便是在于其拥有丰富的第三方库,可以解决很多很多问题.其实Python的标准库也是非常丰富的,今后我将介绍一下Python的标准库. 这个教程使用的书籍就叫做<Pyth ...

  7. python traceback

    1. Python中的异常栈跟踪 之前在做Java的时候,异常对象默认就包含stacktrace相关的信息,通过异常对象的相关方法printStackTrace()和getStackTrace()等方 ...

  8. tornado 模版继承 函数和类的调用

    模版继承.函数和类的调用 目录结构 lesson5.py # -*- coding:utf-8 -*- import tornado.web import tornado.httpserver imp ...

  9. 创建.dat文件(转载)

    比较有用的东比较有用的东西 首先,批处理文件是一个文本文件,这个文件的每一行都是一条DOS命令(大部分时候就好象我们在DOS提示符下执行的命令行一样),你可以使用DOS下的Edit或者Windows的 ...

  10. Windows下修改oracle实例不随服务自动启动

    设置Oracle Administration Assistant for Windows 开始->所有程序->Oracle - OraDb10g_home1->配置和移植工具-&g ...