题链:

http://www.lydsy.com/JudgeOnline/problem.php?id=2752
题解:

期望,线段树。
把每个路段看成一个点,那么对于l~R的操作,就可以转化为对l~r(r=R-1)的路段的操作。
对于每个询问,我们只需要依次考虑每个路段出现在多少个区间里面。
令cnt[i]表示i号路段在cnt[i]个区间包含。
即答案为$$\frac{\sum_{i=l}^{r}v[i]*cnt[i]}{(r-l+1)*(r-l+2)/2(区间总数)}$$
那么就需要在线维护一些,使得能够快速求出上面的值。
考虑每个路段的贡献:
i号路段被(i-l+1)*(r-i+1)个区间包含,
所以贡献为:(i-l+1)*(r-i+1)*v[i],把其展开:
=(l+r)*i*v[i]-l*r*v[i]-l*v[i]+r*v[i]-i*i*v[i]+v[i]。
所以,我们只需要用线段树维护每个区间的路段的v[i]的和,i*v[i]的和,i*i*v[i]的和;

代码:

#include<bits/stdc++.h>
#define MAXN 100005
using namespace std;
long long sumi[MAXN],sumi2[MAXN];
struct SGT{
int size,root;
int ls[MAXN*2],rs[MAXN*2],lazy[MAXN*2];
long long sumval[MAXN*2],sumival[MAXN*2],sumi2val[MAXN*2];
void Pushup(int u){
sumval[u]=sumval[ls[u]]+sumval[rs[u]];
sumival[u]=sumival[ls[u]]+sumival[rs[u]];
sumi2val[u]=sumi2val[ls[u]]+sumi2val[rs[u]];
}
void Add(int &u,int l,int r,int v){
if(!u) u=++size;
sumval[u]+=1ll*(r-l+1)*v;
sumival[u]+=(sumi[r]-sumi[l-1])*v;
sumi2val[u]+=(sumi2[r]-sumi2[l-1])*v;
lazy[u]+=v;
}
void Pushdown(int u,int l,int mid,int r){
Add(ls[u],l,mid,lazy[u]);
Add(rs[u],mid+1,r,lazy[u]);
lazy[u]=0;
}
void Modify(int &u,int l,int r,int al,int ar,int v){
if(!u) u=++size;
if(al<=l&&r<=ar) return Add(u,l,r,v);
int mid=(l+r)>>1;
if(lazy[u]) Pushdown(u,l,mid,r);
if(al<=mid) Modify(ls[u],l,mid,al,ar,v);
if(mid<ar) Modify(rs[u],mid+1,r,al,ar,v);
Pushup(u);
}
long long Contribution(int u,int al,int ar){
return sumival[u]*(al+ar)-sumval[u]*al*ar-sumval[u]*al+sumval[u]*ar-sumi2val[u]+sumval[u];
// return sumival[u]*(al+ar)-sumval[u]*al*ar+sumval[u]*ar-sumival[u]-sumi2val[u];
}
long long Query(int u,int l,int r,int al,int ar){
if(!u) return 0;
if(al<=l&&r<=ar) return Contribution(u,al,ar);
int mid=(l+r)>>1; long long ret=0;
if(lazy[u]) Pushdown(u,l,mid,r);
if(al<=mid) ret+=Query(ls[u],l,mid,al,ar);
if(mid<ar) ret+=Query(rs[u],mid+1,r,al,ar);
return ret;
}
}DT;
int N,M;
long long gcd(long long a,long long b){
while(b^=a^=b^=a%=b);
return a;
}
int main(){
char ch; int l,r,v;
scanf("%d%d",&N,&M);
for(int i=1;i<=N;i++)
sumi[i]=sumi[i-1]+i,sumi2[i]=sumi2[i-1]+1ll*i*i;
for(int i=1;i<=M;i++){
scanf(" %c %d %d",&ch,&l,&r); r--;
if(ch=='C') scanf("%d",&v),DT.Modify(DT.root,1,N,l,r,v);
else {
long long a=DT.Query(DT.root,1,N,l,r);
long long b=1ll*(r-l+1)*(r-l+2)/2;
long long g=gcd(a,b);
a/=g; b/=g; printf("%lld/%lld\n",a,b);
}
}
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)

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

  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. Beta冲刺计划---Day0

    Beta阶段报告---Day0 1.需要改进完善的功能   我们上一阶段开发由于开发时间匆忙,对于爬虫耗时的优化没有考虑.优化的空间我在Alpha阶段的总结报告里说过,具体看下图.   这张图显示出爱 ...

  2. 项目Beta冲刺预热

    Beta准备 1. 讨论组长是否重选的议题和结论. 经过讨论,我们认为,经过一段时间的磨合,现任组长是不需要更换的. 2. 下一阶段需要改进完善的功能. 增加关于征信的功能,贴近选题主题 美化界面,尽 ...

  3. SaaS的那些事儿

    前两年...   大一大二期间,不知道软件架构.云服务器.数据库为何物,偶尔听过却从未用过.天天学的写的东西都是一些命令行代码,所幸在学完<数据结构>和<算法导论>后能够独立实 ...

  4. iOS Storyboard unwind segues使用小结

    使用storyboard开发的时候,经常会在一个scene上添加一个button,再拖拽这个button到某个想要关联的页面,最后选择push的方式跳转.这样scene_A和scene_B就有了一个& ...

  5. IE浏览器支持响应式网站设计

    目前响应式网站设计比较流行, 下面是摘自百度百科有关响应式设计的定义. 响应式网站设计是一种网络页面设计布局,其理念是:集中创建页面的图片排版大小,可以智能地根据用户行为以及使用的设备环境进行相对应的 ...

  6. 我的前端故事----来聊聊react-native应用的健康监控

    监控什么 今天我们来聊聊如何监控你的应用程序,这里的监控说的不是让我们去监控用户,而是监控应用的健康状态,什么是健康状态呢?对于后端的同学来说,在微服务的架构下,每个子服务是否正常工作.返回的结果是否 ...

  7. 用‘+=’拼接字符串,打印时总会出现一个undefined

    var str; for(var i = 0; i < 5; i++){ str += String(i); } console.log(str); 他喵的,打印的结果竟然是"unde ...

  8. Spark入门(1-2)Spark的特点、生态系统和技术架构

    一.Spark的特点 Spark特性 Spark通过在数据处理过程中成本更低的洗牌(Shuffle)方式,将MapReduce提升到一个更高的层次.利用内存数据存储和接近实时的处理能力,Spark比其 ...

  9. 新概念英语(1-55)The Sawyer family

    新概念英语(1-55)The Sawyer family When do the children do their homework? The Sawyers live at 87 King Str ...

  10. python之路——初识函数

    阅读目录 为什么要用函数 函数的定义与调用 函数的返回值 函数的参数 本章小结 返回顶部 为什么要用函数 现在python届发生了一个大事件,len方法突然不能直接用了... 然后现在有一个需求,让你 ...