[BZOJ 2752] 高速公路
Link:
Solution:
虽然有期望,但实际上就是除了个总数……
此题计算总代价明显还是要使用对每个$w_i$计算贡献的方式:
$w_i的贡献为w_i*(i-l+1)*(r-i)$(左端点的方案数乘上右端点的方案数)
为了能使维护的数据符合$RMQ$的性质,我们要将$l,r$分离出来,拆项得到:
$-w_i*i^2+w_i*i*(l+r-1)+w_i*(r-r*l)$
求完前缀和后用3棵线段树分别维护0/1/2次项的区间和即可
Code:
#include <bits/stdc++.h> using namespace std;
#define mid ((l+r)>>1)
#define lc k<<1,l,mid
#define rc k<<1|1,mid+1,r
typedef long long ll;
const int MAXN=1e5+;
char op[];
int n,m,l,r,v;
ll seg[MAXN<<][],tag[MAXN<<],s1[MAXN],s2[MAXN]; void merge(int k)
{for(int i=;i<;i++) seg[k][i]=seg[k<<][i]+seg[k<<|][i];} void modify(int k,int l,int r,ll inc)
{
tag[k]+=inc;
seg[k][]+=inc*(r-l+);
seg[k][]+=inc*(s1[r]-s1[l-]);
seg[k][]+=inc*(s2[r]-s2[l-]);
} void pushdown(int k,int l,int r)
{
if(!tag[k]) return;
modify(lc,tag[k]);modify(rc,tag[k]);
tag[k]=;
} void Update(int a,int b,int x,int k,int l,int r)
{
if(a<=l&&r<=b){modify(k,l,r,x);return;}
pushdown(k,l,r);
if(a<=mid) Update(a,b,x,lc);
if(b>mid) Update(a,b,x,rc);
merge(k);
} ll Query(int a,int b,int x,int k,int l,int r)
{
if(a<=l&&r<=b) return seg[k][x];
pushdown(k,l,r);
ll ret=;
if(a<=mid) ret+=Query(a,b,x,lc);
if(b>mid) ret+=Query(a,b,x,rc);
return ret;
} ll gcd(ll a,ll b)
{return (a%b==)?b:gcd(b,a%b);} int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++)
s1[i]=s1[i-]+i,s2[i]=s2[i-]+1ll*i*i;
while(m--)
{
scanf("%s%d%d",op,&l,&r);
if(op[]=='C')
scanf("%d",&v),Update(l,r-,v,,,n);
else
{
ll res=Query(l,r-,,,,n)*r*(-l)+Query(l,r-,,,,n)*(r+l-)-Query(l,r-,,,,n);
ll div=1ll*(r-l+)*(r-l)/;ll GCD=gcd(res,div);
printf("%lld/%lld\n",res/GCD,div/GCD);
}
}
return ;
}
[BZOJ 2752] 高速公路的更多相关文章
- Bzoj 2752 高速公路 (期望,线段树)
Bzoj 2752 高速公路 (期望,线段树) 题目链接 这道题显然求边,因为题目是一条链,所以直接采用把边编上号.看成序列即可 \(1\)与\(2\)号点的边连得是. 编号为\(1\)的点.查询的时 ...
- BZOJ 2752 高速公路(road)(线段树)
题目链接:http://61.187.179.132/JudgeOnline/problem.php?id=2752 题意:给出一个数列A,维护两种操作: (1)将区间[L,R]之内的所有数字增加de ...
- BZOJ 2752: [HAOI2012]高速公路(road)( 线段树 )
对于询问[L, R], 我们直接考虑每个p(L≤p≤R)的贡献,可以得到 然后化简一下得到 这样就可以很方便地用线段树, 维护一个p, p*vp, p*(p+1)*vp就可以了 ----------- ...
- BZOJ 2752: [HAOI2012]高速公路(road) [线段树 期望]
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1219 Solved: 446[Submit] ...
- bzoj 2752 9.20考试第三题 高速公路(road)题解
2752: [HAOI2012]高速公路(road) Time Limit: 20 Sec Memory Limit: 128 MBSubmit: 1545 Solved: 593[Submit] ...
- bzoj 2752: [HAOI2012]高速公路(road)
Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y901高速公路是一条由N-1段路以及N个收 ...
- ●BZOJ 2752 [HAOI2012]高速公路(road)
题链: http://www.lydsy.com/JudgeOnline/problem.php?id=2752题解: 期望,线段树. 把每个路段看成一个点,那么对于l~R的操作,就可以转化为对l~r ...
- BZOJ 2752 [HAOI2012]高速公路(road):线段树【维护区间内子串和】
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=2752 题意: 有一个初始全为0的,长度为n的序列a. 有两种操作: (1)C l r v: ...
- BZOJ 2752:[HAOI2012]高速公路(road)(线段树)
[HAOI2012]高速公路(road) Description Y901高速公路是一条重要的交通纽带,政府部门建设初期的投入以及使用期间的养护费用都不低,因此政府在这条高速公路上设立了许多收费站.Y ...
随机推荐
- Codeforces Round #350 (Div. 2) D1
D1. Magic Powder - 1 time limit per test 1 second memory limit per test 256 megabytes input standard ...
- 线段树模板 CDOJ1057
UESTCOJ不知道为什么进不去了哇 跟着叉姐的算法讲堂写的板子 叉姐的思路真的好清晰啊,一定是练习的多并且理解的够深了 希望自己也可以每天进步一点点吧 代码: #include <map> ...
- video视频在结束之后回到初始状态
目前尝试了两种解决方案,但是方案1在安卓移动端无法生效(猜测是因为移动端安卓启动的是原生的视频播放控件的原因) 方案一: 重新load资源,这种方法比较简洁,但是在安卓下不适用 video.addEv ...
- 【Foreign】魔法 [组合数][质因数分解]
魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description Input Output 仅一行一个整数表示答案. Sample Input 4 10 ...
- [BZOJ2946] [Poi2000]公共串解题报告|后缀数组
给出几个由小写字母构成的单词,求它们最长的公共子串的长度. 单词个数<=5,每个单词长度<=2000 尽管最近在学的是SAM...但是看到这个题还是忍不住想写SA... (其实是不 ...
- magento目录了解
对magento目录的了解:
- keras_训练人脸识别模型心得
keras_cnn_实现人脸训练分类 废话不多扯,直接进入正题吧!今天在训练自己分割出来的图片,感觉效果挺不错的,所以在这分享一下心得,望入门的同孩采纳. 1.首先使用python OpenCV库里面 ...
- 说出JAVA中一些常用的类,包,接口,请各举5个~~~
类:1.java.lang.Object2.java.lang.String3.java.lang.System4.java.io.file5.java.io.FileInputStream6.jav ...
- [Leetcode Week11]Kth Largest Element in an Array
Kth Largest Element in an Array 题解 题目来源:https://leetcode.com/problems/kth-largest-element-in-an-arra ...
- linux驱动基础系列--Linux I2c驱动分析
前言 主要是想对Linux I2c驱动框架有一个整体的把控,因此会忽略协议上的某些细节,同时里面涉及到的一些驱动基础,比如平台驱动.设备模型.sysfs等也不进行详细说明原理,涉及到i2c协议部分也只 ...