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

算期望的话考虑用总权值/总方案。。。

然后如何统计总权值,我们单独考虑每一条边会经过多少次来计算贡献,然后求和。。。

即要求:

然后暴力展开是要求:

那么用线段树维护i^2*v[i],i*v[i],v[i]的和即可。。。

这个题用cout输出会RE。。。

// MADE BY QT666
#include<cstdio>
#include<algorithm>
#include<cmath>
#include<iostream>
#include<cstring>
#define int long long
using namespace std;
typedef long long ll;
const int N=600050;
int ls[N*4],rs[N*4],rt,sz,n,m;
char ch[N];
struct data{
ll sum1,sum2,sum3;
}tr[N*4];
data operator + (const data &a,const data &b){
return (data){a.sum1+b.sum1,a.sum2+b.sum2,a.sum3+b.sum3};
}
ll sum1[N],sum2[N],sum3[N],lazy[N*4];
void pushup(int x){tr[x]=tr[ls[x]]+tr[rs[x]];}
void insert(int &x,int l,int r,int id){
if(!x) x=++sz;
if(l==r) {tr[x].sum1=tr[x].sum2=tr[x].sum3=0;return;}
int mid=(l+r)>>1;
if(id<=mid) insert(ls[x],l,mid,id);
else insert(rs[x],mid+1,r,id);
pushup(x);
}
void Modify(int x,int v,int l,int r){
tr[x].sum1+=1ll*v*(sum1[r]-sum1[l-1]);
tr[x].sum2+=1ll*v*(sum2[r]-sum2[l-1]);
tr[x].sum3+=1ll*v*(sum3[r]-sum3[l-1]);
}
void update(int x,int l,int r,int xl,int xr,int v){
if(xl<=l&&r<=xr){Modify(x,v,l,r);lazy[x]+=v;return;}
int mid=(l+r)>>1;
if(xr<=mid) update(ls[x],l,mid,xl,xr,v);
else if(xl>mid) update(rs[x],mid+1,r,xl,xr,v);
else update(ls[x],l,mid,xl,mid,v),update(rs[x],mid+1,r,mid+1,xr,v);
pushup(x);Modify(x,lazy[x],l,r);
}
data query(int x,int l,int r,int xl,int xr,int la){
if(xl<=l&&r<=xr){
return (data){
tr[x].sum1+la*(sum1[r]-sum1[l-1]),
tr[x].sum2+la*(sum2[r]-sum2[l-1]),
tr[x].sum3+la*(sum3[r]-sum3[l-1])
};
}
int mid=(l+r)>>1;la+=lazy[x];
if(xr<=mid) return query(ls[x],l,mid,xl,xr,la);
else if(xl>mid) return query(rs[x],mid+1,r,xl,xr,la);
return query(ls[x],l,mid,xl,xr,la)+query(rs[x],mid+1,r,mid+1,xr,la);
}
ll gcd(ll x,ll y){return y?gcd(y,x%y):x;}
main(){
scanf("%lld%lld",&n,&m);
for(int i=1;i<=n;i++) sum1[i]=sum1[i-1]+1,sum2[i]=sum2[i-1]+i,sum3[i]=sum3[i-1]+i*i;
for(int i=1;i<=n-1;i++) insert(rt,1,n-1,i);
for(int i=1;i<=m;i++){
scanf("%s",ch+1);
if(ch[1]=='Q'){
int l,r;scanf("%lld%lld",&l,&r);
r--;data ans=query(rt,1,n-1,l,r,0);
ll fm=-ans.sum3+1ll*(l+r)*ans.sum2-1ll*(l-r-1+l*r)*ans.sum1;
ll fz=1ll*(r-l+2)*(r-l+1)/2;
ll Gcd=gcd(fm,fz);
printf("%lld/%lld\n",fm/Gcd,fz/Gcd);
}
else{
int l,r,v;scanf("%lld%lld%lld",&l,&r,&v);
r--;update(rt,1,n-1,l,r,v);
}
}
return 0;
}

bzoj 2752: [HAOI2012]高速公路(road)的更多相关文章

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

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

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

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

  3. ●BZOJ 2752 [HAOI2012]高速公路(road)

    题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2752题解: 期望,线段树. 把每个路段看成一个点,那么对于l~R的操作,就可以转化为对l~r ...

  4. BZOJ 2752 [HAOI2012]高速公路(road):线段树【维护区间内子串和】

    题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2752 题意: 有一个初始全为0的,长度为n的序列a. 有两种操作: (1)C l r v: ...

  5. BZOJ2752: [HAOI2012]高速公路(road)

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

  6. 【线段树】BZOJ2752: [HAOI2012]高速公路(road)

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

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

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

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

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

  9. 【bzoj2752】[HAOI2012]高速公路(road) 线段树

    题目描述 Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收费站组成的东西 ...

随机推荐

  1. 机器学习算法--Perceptron(感知机)算法

    感知机: 假设输入空间是\(\chi\subseteq R^n\),输出空间是\(\gamma =\left( +1,-1\right)\).输入\(\chi\in X\)表示实例的特征向量,对应于输 ...

  2. OC语言的面向对象—类和对象、方法

    1. 面向对象和面向过程思想 OC是面向对象的,C是面向过程的.面向对象和面向过程只是解决问题的两种不同思想 1. 面向对象和面向过程的区别 1) 以用电脑听歌为例子 a) 面向过程 ➢ 打开电脑 ➢ ...

  3. Javascript-基础概念总结

    [作用域]javascript中的作用域可以理解为一个语句执行的环境大小,有全局的作用域,函数作用域和eval作用域.在JS中没有块级作用域.讲到作用域,不得不讲执行环境,执行环境在JS中是最为重要的 ...

  4. 虚拟机安装 deepin Linux 注意事项

    主要要注意下面几点: 一.虚拟机"客户机操作系统"类型 选择"Windows 7 x64" 选择"客户机操作系统"类型,这个选择十分重要,D ...

  5. canvas画一个时钟

    效果图如下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...

  6. null id in entry (don't flush the Session after an exception occurs) 解决方法

    最近在学习基于ssh的注解的系统,然后在实现往数据库增加记录时可以增加第一个,第二个就报错,在网上查了很多资料,大多都是 该异常信息是在提示我们没有为数据中的非空字段设置值. 然后就一直没有明白 明明 ...

  7. PAT乙级--1003

    1003. 我要通过!(20) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 CHEN, Yue "答案正确"是 ...

  8. (高级篇)php结合redis实现高并发下的抢购、秒杀功能

    抢购.秒杀是如今很常见的一个应用场景,主要需要解决的问题有两个:1 高并发对数据库产生的压力2 竞争状态下如何解决库存的正确减少("超卖"问题)对于第一个问题,已经很容易想到用缓存 ...

  9. lunx命令2

    测试网络 ping 查看ip ifconfig 关闭防火墙 iptables -F 干掉nginx进程 killall nginx 切换用户 su linux下连接另一台linux服务区 ssh ro ...

  10. 【Flink】流-表概念

    title: Flink流-表概念 date: 2017-12-12 14:48:16 categories: technique tags: Flink Flink Streaming Dynami ...