[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 ...
随机推荐
- 使用JavaScript时要注意的7个要素
每种语言都有它特别的地方,对于JavaScript来说,使用var就可以声明任意类型的变量,这门脚本语言看起来很简单,然而想要写出优雅的代码却是需要不断积累经验的.本文利列举了JavaScript初学 ...
- 适用于实数范围的中缀表达式的 + - * / ( ) 计算(C++实现)
核心算法: mid=FormatMid(mid); //格式化中缀表达式 JudgeLegalMid(mid); //判断中缀表达式的合法性 MidToPost mtp(mid); mtp.ToPos ...
- gogole调试请求体的数据怎么知道
在network---->header->request payload中看 详细情况见下图所示:
- 用spring的@Validated注解和org.hibernate.validator.constraints.*的一些注解在后台完成数据校验
这个demo主要是让spring的@Validated注解和hibernate支持JSR数据校验的一些注解结合起来,完成数据校验.这个demo用的是springboot. 首先domain对象Foo的 ...
- dbcp重连问题排查
转载自:http://lc87624.iteye.com/blog/1734089 使用数据库连接池时,免不了会遇到断网.数据库挂掉等异常状况,当网络或数据库恢复时,若无法恢复连接池中的连接,那必然会 ...
- jaspersoft中分组打印
一:前言 使用IReport已经四个月了,最近在做一个保镖,是要按照类型分类,并且这些类型要横着打印,最后还要算这个类型金额的总值,这张报表现是说需要用到子报表,最后和一个同事一起用group来分组做 ...
- tomcat:tomcat的OutOfMemoryError解决
最近在熟悉一个开发了有几年的项目,需要把数据库从mysql移植到oracle,首先把jdbc的连接指向 mysql,打包放到tomcat里面,可以跑起来,没有问题,可是当把jdbc连接指向oracle ...
- 图论:Gale-Shapley算法
Gale-Shapley算法又叫做延迟认可算法,它可以解决这么一个问题 一共有N位男士和N位女士 每位男士对每位女士都有一个好感度,让他们结合成为N对夫妻,要求男士优先表白,最后问结合情况 第一轮,每 ...
- Spring - IoC(12): 属性占位符
使用属性占位符可以将 Spring 配置文件中的部分元数据放在属性文件中设置,这样可以将相似的配置(如 JDBC 的参数配置)放在特定的属性文件中,如果只需要修改这部分配置,则无需修改 Spring ...
- 1552: [Cerc2007]robotic sort
这道题用splay写 先离散化数据保证按题目所述顺序来写 按原序作为键值建树 维护区间最小值去跑 每次将i的位置 和 n的位置x和y找出来后 将x旋转到root y旋转到x的有儿子 这时y的左子树就是 ...