2752: [HAOI2012]高速公路(road)

Time Limit: 20 Sec  Memory Limit: 128 MB
Submit: 1545  Solved: 593
[Submit][Status][Discuss]

Description

Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站。
Y901高速公路是一条由N-1段路以及N个收费站组成的东西向的链,我们按照由西向东的顺序将收费站依次编号为1~N,从收费站i行驶到i+1(或从i+1行驶到i)需要收取Vi的费用。高速路刚建成时所有的路段都是免费的。
政府部门根据实际情况,会不定期地对连续路段的收费标准进行调整,根据政策涨价或降价。
无聊的小A同学总喜欢研究一些稀奇古怪的问题,他开车在这条高速路上行驶时想到了这样一个问题:对于给定的l,r(l<r),在第l个到第r个收费站里等概率随机取出两个不同的收费站a和b,那么从a行驶到b将期望花费多少费用呢?

Input

第一行2个正整数N,M,表示有N个收费站,M次调整或询问
接下来M行,每行将出现以下两种形式中的一种
C l r v 表示将第l个收费站到第r个收费站之间的所有道路的通行费全部增加v
Q l r   表示对于给定的l,r,要求回答小A的问题
所有C与Q操作中保证1<=l<r<=N

Output

对于每次询问操作回答一行,输出一个既约分数
若答案为整数a,输出a/1

Sample Input

4 5
C 1 4 2
C 1 2 -1
Q 1 2
Q 2 4
Q 1 4

Sample Output

1/1
8/3
17/6

HINT

数据规模

所有C操作中的v的绝对值不超过10000

在任何时刻任意道路的费用均为不超过10000的非负整数

所有测试点的详细情况如下表所示

Test N M

1 =10 =10

2 =100 =100

3 =1000 =1000

4 =10000 =10000

5 =50000 =50000

6 =60000 =60000

7 =70000 =70000

8 =80000 =80000

9 =90000 =90000

10 =100000 =100000  

  考试前一天晚上做梦,梦见自己考试140,倒数第二,一开始以为自己只是日有所思夜有所梦,然后……这道题助我梦想成真/(ㄒoㄒ)/~~然而最终只有20分……
  其实当天已经推出来了式子,然而由于不敢去打,只能打了区间修改单点查询的打法,结果还全E了,好尴尬啊,连暴力的40分都没拿到。
  基本大多数人都可以推到这里——一个边对于答案的贡献(不算分母):设这条边为第i条边,询问为l,r:(i-l+1)*(r-i)*v[i]。
  然后我们大可把这个式子展开为:
      r*(i+1)*v[i]+i*l*v[i]-l*r*v[i]-i*(i+1)*v[i]。
  由于l,r随询问而变,我们无从得知,但由于求得是上述式子的最终值,我们可以去维护上式中的四个单项式,以及他们的系数。
  通过系数我们就可以很轻松的应对区间修改,因为系数是不受任何影响的,而对于每一个修改,对于答案的影响就是修改值乘以系数,这样我们的修改查询都是log n的了。
  最后叮嘱的一点是long long 不然会死的很惨。
 #include<iostream>
#include<cstdlib>
#include<cstdio>
#include<cstring>
#include<queue>
#include<algorithm>
#include<cmath>
#include<map>
#include<vector>
#define N 100004
#define int long long
using namespace std;
int n,m;
struct no
{
int left,right,mid;
long long lazy;
long long data[];
long long sum[];
}node[N*];
long long gcd(long long a,long long b)
{
if(b==)return a;
return gcd(b,a%b);
}
void pushup(int x)
{
for(int i=;i<=;i++)
{
node[x].data[i]=node[x*].data[i]+node[*x+].data[i];
node[x].sum[i]=node[x*].sum[i]+node[*x+].sum[i];
}
}
void build(int left,int right,int x)
{
node[x].left=left,node[x].right=right;
if(left==right)
{
node[x].data[]=left+;
node[x].data[]=left;
node[x].data[]=;
node[x].data[]=left*(left+);
return;
}
int mid=(left+right)>>;
node[x].mid=mid;
build(left,mid,*x);
build(mid+,right,*x+);
pushup(x);
}
struct inf
{
long long a,b;
};
char b[];
void pushdown(int x)
{
if(node[x].lazy)
{
node[*x].lazy+=node[x].lazy;
node[x*+].lazy+=node[x].lazy;
for(int i=;i<=;i++)
{
node[*x].sum[i]+=node[x].lazy*node[*x].data[i];
node[*x+].sum[i]+=node[x].lazy*node[*x+].data[i];
}
node[x].lazy=;
}
}
void add(int left,int right,int x,int z)
{
if(node[x].left==left&&node[x].right==right)
{
node[x].lazy+=z;
for(int i=;i<=;i++)
node[x].sum[i]+=node[x].data[i]*z;
return;
}
pushdown(x);
int mid=node[x].mid;
if(left>mid)
add(left,right,x*+,z);
else if(right<=mid)
add(left,right,*x,z);
else
add(left,mid,x*,z),add(mid+,right,*x+,z);
pushup(x);
}
inf get(long long left,long long right,int x,long long l,long long r)
{
if(node[x].left==left&&node[x].right==right)
{
inf aa;
aa.a=node[x].sum[]*r-l*r*node[x].sum[];
aa.a-=node[x].sum[];
aa.a+=l*node[x].sum[];
aa.b=(r-l+)*(r-l)/;
long long t=gcd(aa.a,aa.b);
aa.a/=t;
aa.b/=t;
return aa;
}
pushdown(x);
int mid=node[x].mid;
if(left>mid)
return get(left,right,*x+,l,r);
else if(right<=mid)
return get(left,right,*x,l,r);
else
{
inf aa=get(left,mid,*x,l,r);
inf bb=get(mid+,right,*x+,l,r);
if(aa.b==bb.b)
{
aa.a+=bb.a;
long long t=gcd(aa.a,aa.b);
if(t!=)
aa.a/=t,aa.b/=t;
return aa;
}
else
{
long long tt=gcd(aa.b,bb.b);
long long c;
if(aa.b%tt==)
{
c=aa.b/tt;
c*=bb.b;
}
else if(bb.b%tt==)
{
c=bb.b/tt;
c*aa.b;
}
else
{
c=aa.b*bb.b/tt;
}
aa.a*=c/aa.b;
bb.a*=c/bb.b;
aa.a+=bb.a;
aa.b=c;
long long t=gcd(aa.a,aa.b);
if(t!=)
aa.a/=t,aa.b/=t;
return aa;
}
}
}
signed main()
{
scanf("%lld%lld",&n,&m);
build(,n-,);
while(m--)
{
scanf("%s",b);
if(b[]=='C')
{
int l,r,z;
scanf("%lld%lld%lld",&l,&r,&z);
add(l,r-,,z);
}
else
{
long long l,r;
scanf("%lld%lld",&l,&r);
inf tt=get(l,r-,,l,r);
printf("%lld/%lld\n",tt.a,tt.b);
}
}
return ;
}

bzoj 2752 9.20考试第三题 高速公路(road)题解的更多相关文章

  1. 9.5 考试 第三题 奇袭题解(codeforce 526f)

    问题 C: 奇袭 时间限制: 1 Sec  内存限制: 256 MB 题目描述 由于各种原因,桐人现在被困在Under World(以下简称UW)中,而UW马上 要迎来最终的压力测试——魔界入侵. 唯 ...

  2. 9.18考试 第三题chess题解

    在讲这道题之前我们先明确一个丝薄出题人根本没有半点提示却坑死了无数人的注意点: 走敌人和不走敌人直接到时两种走法,但只走一个敌人和走一大坨敌人到同一个点只算一种方案(当然,前提是步骤一致). 当时看完 ...

  3. 【BZOJ】【2752】【HAOI2012】高速公路(Road)

    数学期望/线段树 然而又是一道road= =上一道是2750…… 下次不要一看期望题就弃疗么…… 期望题≠不可做题……!! 其实在这题中,期望就是(所有情况下 权值之和)/(总方案数) 因为是等概率抽 ...

  4. JXJJOI2018_三题

    这次比赛的话其实还挺满意的,虽然T1 20pts(指的是分数,考试时知道有坑但是考完都没找到的我就知道切不掉这题qwq),T3爆零是在意料之外,不过其实T2贪心能切掉也是意料之外的,所以作此判断.当然 ...

  5. C语言考试解答十题

    学院比较奇葩,大一下期让学的VB,这学期就要学C++了,然后在开学的前三个周没有课,就由老师讲三个周的C语言,每天9:30~11:30听课,除去放假和双休日,实际听课时间一共是12天*2小时,下午是1 ...

  6. NOIP2005-普及组复赛-第三题-采药

    题目描述 Description 辰辰是个天资聪颖的孩子,他的梦想是成为世界上最伟大的医师.为此,他想拜附近最有威望的医师为师.医师为了判断他的资质,给他出了一个难题.医师把他带到一个到处都是草药的山 ...

  7. 看雪.TSRC 2017CTF秋季赛第三题

    看雪.TSRC 2017CTF秋季赛第三题 wp 这是一道很简单的题,反调试的坑略多.这道题采用了很多常用的反调试手段,比如调用IsDebuggerPresent.进程名检查等等.另外也有利用SEH的 ...

  8. 【LOJ6067】【2017 山东一轮集训 Day3】第三题 FFT

    [LOJ6067][2017 山东一轮集训 Day3]第三题 FFT 题目大意 给你 \(n,b,c,d,e,a_0,a_1,\ldots,a_{n-1}\),定义 \[ \begin{align} ...

  9. test20181016 B君的第三题

    题意 B 君的第三题(haskell) 题目描述 大学四年,我为什么,为什么不好好读书,没找到和你一样的工作. B 君某天看到了这样一个题,勾起了无穷的回忆. 输入\(n, k\) 和一棵\(n\) ...

随机推荐

  1. ARM中 __IO的作用解析

    __IO在头文件中预定义 #define __IO volatile volatile 影响编译器编译的结果, 指出:volatile 变量是随时可能发生变化的,与volatile变量有关的运算,不要 ...

  2. 怎样解决python dataframe loc,iloc循环处理速度很慢的问题

    怎样解决python dataframe loc,iloc循环处理速度很慢的问题 1.问题说明 最近用DataFrame做大数据 处理,发现处理速度特别慢,追究原因,发现是循环处理时,loc,iloc ...

  3. 微信小程序把玩(二十八)image组件

    原文:微信小程序把玩(二十八)image组件 image组件也是一个程序不可缺少的,可以这样说一个app中image组件随处可以看到,一般 image有两种加载方式第一种是网络图片第二种是本地图片资源 ...

  4. BooleanToColorConverter

    public class BooleanToColorConverter : IValueConverter { public object Convert(object value, Type ta ...

  5. UAC就不能一次添加、永久信任吗?

    每次都要点击确定,感觉好麻烦. 而且阻碍了某些功能的实现.

  6. Ruby已经慢慢走向衰退了,那些年代久远而且小众的语言没有翻身的可能性

    Ruby已经慢慢走向衰退了,现在WEB开发里,NODE.JS+前端各种框架是主流,PHP.ruby.Asp.net.python等语言在网站编程方面只会越来越少.数据领域方面,机器学习和人工智能中,p ...

  7. Editor.md v1.4.2 发布,改进自定义工具栏

    分享 <关于我> 分享  [中文纪录片]互联网时代                 http://pan.baidu.com/s/1qWkJfcS 分享 <HTML开发MacOSAp ...

  8. 深入浅出RPC——深入篇(转载)

    本文转载自这里是原文 <深入篇>我们主要围绕 RPC 的功能目标和实现考量去展开,一个基本的 RPC 框架应该提供什么功能,满足什么要求以及如何去实现它? RPC 功能目标 RPC的主要功 ...

  9. 【MyEclipse常见错误】-java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory的解决

    ApacheJavaTomcatMyeclipse  自己前一段时间出现了这个问题,通过在网上搜索,大概知道了原因,整理下一,以供大家参考. 将项目部署好后,启动tomcat后报错,java.lang ...

  10. c++用参数返回堆上的空间

    <高质量c++和c编程>7.4 指针参数是如何传递内存的一节中写道 void GetMemory(char *p, int num) { p = (char *)malloc(sizeof ...