P2221 [HAOI2012]高速公路

显然答案为 $\dfrac{\sum_{i=l}^r\sum_{j=l}^{r}dis[i][j]}{C_{r-l+1}^2}$

下面倒是挺好算,组合数瞎搞

上面咋算呢

先考虑每条边被算上的次数$ans = \sum_{i=l}^{r}a[i]*(r-i+1)(i-l+1)$

我们把它拆开再合并瞎搞,按变量$i$的次数分项

蓝后化出来这个式子:

$ans = (r - l- r*l+1) *S_{1}+ (l+r)*S_{2}-S_{3}$

$S_{1} = \sum_{i=l}^{r} a[i]$

$S_{2} = \sum_{i=l}^{r} a[i]*i$

$S_{3} = \sum_{i=l}^{r} a[i]*i*i$

显然这是可以用线段树维护的辣

区间添加$k$时

显然$S_{1}+=(r-l+1)*k$

$S_{2}+=\sum i *k$

$S_{3}+=\sum i*i *k$

再开俩数组维护下$S_{4}=\sum i $和$S_{5}=\sum i*i$就好辣

注意我们是按边开线段树,所以$r-=1$,组合数也要改为$C_{r-l+1}^2$

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
typedef long long ll;
void read(int &x){
char c=getchar();x=; int f=;
while(c<''||c>'') f=f&&(c!='-'),c=getchar();
while(''<=c&&c<='') x=x*+(c^),c=getchar();
x=f?x:-x;
}
#define W 400005
int n,m; ll S1,S2,S3,ans,tot,g;
ll add[W],s1[W],s2[W],s3[W],s4[W],s5[W];
#define lc o<<1
#define rc o<<1|1
#define mid (l+r)/2
inline void up(int o){
s1[o]=s1[lc]+s1[rc],
s2[o]=s2[lc]+s2[rc],
s3[o]=s3[lc]+s3[rc];
}
void down(int o,int l,int r){
if(!add[o]) return ;
s1[lc]+=1ll*(mid-l+)*add[o], s1[rc]+=1ll*(r-mid)*add[o];
s2[lc]+=s4[lc]*add[o], s2[rc]+=s4[rc]*add[o];
s3[lc]+=s5[lc]*add[o], s3[rc]+=s5[rc]*add[o];
add[lc]+=add[o], add[rc]+=add[o]; add[o]=;
}
void build(int o,int l,int r){
if(l==r){s4[o]=l,s5[o]=1ll*l*l; return ;}
build(lc,l,mid); build(rc,mid+,r);
s4[o]=s4[lc]+s4[rc], s5[o]=s5[lc]+s5[rc];
}
void Add(int o,int l,int r,int x1,int x2,int v){
if(x1<=l&&r<=x2){
add[o]+=v, s1[o]+=(r-l+)*v,
s2[o]+=s4[o]*v, s3[o]+=s5[o]*v;
return ;
}down(o,l,r);
if(x1<=mid) Add(lc,l,mid,x1,x2,v);
if(x2>mid) Add(rc,mid+,r,x1,x2,v);
up(o);
}
void Ask(int o,int l,int r,int x1,int x2){
if(x1<=l&&r<=x2){
S1+=s1[o], S2+=s2[o], S3+=s3[o];
return ;
}down(o,l,r);
if(x1<=mid) Ask(lc,l,mid,x1,x2);
if(x2>mid) Ask(rc,mid+,r,x1,x2);
}
ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
int main(){
char opt[]; int l,r,v;
read(n);read(m); --n;
build(,,n);
while(m--){
scanf("%s",opt); read(l);read(r); --r;
if(opt[]=='C') read(v),Add(,,n,l,r,v);
else{
S1=S2=S3=; Ask(,,n,l,r);
ans=1ll*(r-l-1ll*l*r+)*S1+1ll*(l+r)*S2-S3;
tot=1ll*(r-l+)*(r-l+)/;
g=gcd(ans,tot); ans/=g; tot/=g;
printf("%lld/%lld\n",ans,tot);
}
}return ;
}

P2221 [HAOI2012]高速公路(线段树)的更多相关文章

  1. JZYZOJ1527 [haoi2012]高速公路 线段树 期望

    http://172.20.6.3/Problem_Show.asp?id=1527 日常线段树的pushdown写挂,果然每次写都想得不全面,以后要注意啊……求期望部分也不熟练,和平均数搞混也是or ...

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

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

  3. 洛谷 P2221 [HAOI2012]高速公路

    链接: P2221 题意: 有 \(n(1\leq n\leq 10^5)\) 个点,从第 \(i(1\leq i< n)\) 个点向第 \(i+1\) 个点连有边.最初所有边长 \(v_i\) ...

  4. 洛谷P2221 [HAOI2012]高速公路

    线段树 #include<cstdio> #include<cstdlib> #include<algorithm> #include<cstring> ...

  5. 【题解】Luogu P2221 [HAOI2012]高速公路

    原题传送门 这道题还算简单 我们要求的期望值: \[\frac{\sum_{i=l}^r\sum_{j=l}^rdis[i][j]}{C_{r-l+1}^{2}}\] 当然是上下两部分分别求,下面肥肠 ...

  6. P2221 [HAOI2012]高速公路

    思路 考虑每一条边的贡献,然后推式子 \[ \begin{align}&\sum_{i}V_i\times(R-i+1)\times(i-L+1)\\=&\sum_{i}V_i\lef ...

  7. luogu P2221 [HAOI2012]高速公路题解

    题面 很套路的拆式子然后线段树上维护区间和的题.一般都是把式子拆成区间内几个形如\(\sum i*a_i, \sum i^2 * a_i\)的式子相加减的形式. 考虑一次询问[l,r]的答案怎么算: ...

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

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

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

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

随机推荐

  1. 【EatBook】-NO.1.EatBook.1.JavaData.1.001-《JSON 必知必会-Introduction to JavaScript Object Notation》-

    1.0.0 Summary Tittle:[EatBook]-NO.1.EatBook.1.JavaData.1.001-<JSON 必知必会-Introduction to JavaScrip ...

  2. [LeetCode] 661. Image Smoother_Easy

    Given a 2D integer matrix M representing the gray scale of an image, you need to design a smoother t ...

  3. 启动及更改tomcat 配置

    到tomcat安装的bin目录下面,双击那个startup.bat文件,启动Tomcat 去浏览器输入 http://localhost:8080/  然后出现下面的界面,那就说明你的tomcat配置 ...

  4. T Y P E L I B R A R I E S库加载

    #---------------------------------------------------------------------------- # T Y P E L I B R A R ...

  5. xml文档对象模型doc

    对与DOM来说 ,一切都是节点Node; ②Document可以看成一个节点,Element可以看成一个节点,Text可以看成一个节点, 封装出来的对象都可以看成节点Node; ③在JDK中,Node ...

  6. python selenium截取指定元素图片

    1.截取当前屏幕 @property def getImage(self): ''' 截取图片,并保存在images文件夹 :return: 无 ''' timestrmap = time.strft ...

  7. react native中使用 react-native-easy-toast 和react-native-htmlview

    第一步,下载依赖 npm install react-native-htmlview --save npm install react-native-easy-toast --save 第二步,引入 ...

  8. django admim后台不转义提交的html

    autoescape¶ Controls the current auto-escaping behavior. This tag takes either on or off as an argum ...

  9. 排序(I)

    NSSortDescriptor 排序 Person类 #import <Foundation/Foundation.h> @interface Person : NSObject @pr ...

  10. 【2017-04-25】winform公共控件、菜单和工具栏

    一.公共控件 公共控件很多的属性很多都相似,这些是大部分都相同的: +布局 - AutoSize:自动适应控件上文字内容- Location:位置- Margin:控件间的间距- Size:控件大小 ...