P3924 康娜的线段树

题目描述

小林是个程序媛,不可避免地康娜对这种人类的“魔法”产生了浓厚的兴趣,于是小林开始教她\(OI\)。

今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以维护一段区间的信息,是非常厉害的东西。康娜试着写了一棵维护区间和的线段树。由于她不会打标记,因此所有的区间加操作她都是暴力修改的。具体的代码如下:

struct Segment_Tree{
#define lson (o<<1)
#define rson (o<<1|1)int sumv[N<<2],minv[N<<2];inline void pushup(int o){sumv[o]=sumv[lson]+sumv[rson];}inline void build(int o,int l,int r){if(l==r){sumv[o]=a[l];return;}int mid=(l+r)>>1;build(lson,l,mid);build(rson,mid+1,r);pushup(o);}inline void change(int o,int l,int r,int q,int v){if(l==r){sumv[o]+=v;return;}int mid=(l+r)>>1;if(q<=mid)change(lson,l,mid,q,v);else change(rson,mid+1,r,q,v);pushup(o);}
}T; 

在修改时,她会这么写:

for(int i=l;i<=r;i++)T.change(1,1,n,i,addv);

显然,这棵线段树每个节点有一个值,为该节点管辖区间的区间和。

康娜是个爱思考的孩子,于是她突然想到了一个问题:

如果每次在线段树区间加操作做完后,从根节点开始等概率的选择一个子节点进入,直到进入叶子结点为止,将一路经过的节点权值累加,最后能得到的期望值是多少?

康娜每次会给你一个值\(qwq\),保证你求出的概率乘上\(qwq\)是一个整数。

这个问题太简单了,以至于聪明的康娜一下子就秒了。

现在她想问问你,您会不会做这个题呢?

输入输出格式

输入格式:

第一行整数\(n,m,qwq\)表示线段树维护的原序列的长度,询问次数,分母。

第二行\(n\)个数,表示原序列。

接下来\(m\)行,每行三个数\(l,r,x\)表示对区间\([l,r]\)加上\(x\)

输出格式:

共\(m\)行,表示期望的权值和乘上\(qwq\)结果。

说明

对于30%的数据,保证 \(1 \leq n,m \leq 100\)

对于70%的数据,保证 \(1 \leq n,m, \leq 10^{5}\)

对于100%的数据,保证 \(1 \leq n,m \leq 10^6\)

\(-1000 \leq a_i,x \leq 1000\)


其实题目不难,然而我概率期望学的差,还是不怎么会做。

我们发现,其实每个叶子节点的贡献的不会变的,则第\(i\)个叶子节点贡献的次数是它之前的所有包含它的区间的贡献次数之和。

根据条件概率,每一个大区间出现的概率都是它的子区间的两倍,所以我们以最小的区间算做1,统计每个叶子节点的贡献次数,最后再除以\(\lceil logn \rceil\)即可。

具体实现可以直接模拟建树统计。

然后我们发现操作只有区间加和全局询问。

区间加我们可以通过叶子节点贡献次数前缀和维护全局偏移量。

复杂度:\(O(nlogn+m)\)


Code:

#include <cstdio>
#define ll long long
ll max(ll x,ll y){return x>y?x:y;}
const ll N=1000010;
ll dat[N],cnt[N],f[N],ans,QAQ,n,m,d,dep[N];
void build(ll l,ll r,ll Dep)
{if(l==r){dep[l]=Dep;d=max(d,Dep);return;}ll mid=l+r>>1;build(l,mid,Dep+1);build(mid+1,r,Dep+1);
}
void init()
{scanf("%lld%lld%lld",&n,&m,&QAQ);build(1,n,1);for(ll i=1;i<=n;i++){if(dep[i]==d)cnt[i]=(1<<d)-1;elsecnt[i]=(1<<d)-2;scanf("%lld",dat+i);f[i]=f[i-1]+cnt[i];ans+=cnt[i]*dat[i];}
}
void work()
{ll l,r,x;d=1<<d-1;for(ll i=1;i<=m;i++){scanf("%lld%lld%lld",&l,&r,&x);ans+=(f[r]-f[l-1])*x;printf("%lld\n",(QAQ/d*ans));}
}
int main()
{init();work();return 0;
}

2018.7.21

转载于:https://www.cnblogs.com/butterflydew/p/9347494.html

洛谷 P3924 康娜的线段树 解题报告相关推荐

  1. 洛谷 P3924 康娜的线段树

    P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...

  2. P3924 康娜的线段树(マジやばくね)(线段树、期望、前缀和)难度⭐⭐⭐★

    P3924 康娜的线段树 我觉得挺难的,マ(ma)ジ(ji)や(ya)ば(ba)く(ku)ね(ne)(不得了了)知道康娜的应该都懂 题解 P3924 [康娜的线段树] #include<iost ...

  3. P3924 康娜的线段树

    P3924 康娜的线段树 题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以 ...

  4. P3924 康娜的线段树(线段树+期望)

    题目 题目传送门\color{red} 题目传送门题目传送门 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段 ...

  5. 洛谷 P3373 【模板】线段树 2 题解

    洛谷 P3373 [模板]线段树 2 题解 题面 题目链接:[戳这里](https://www.luogu.org/problemnew/show/P3373) 题目描述 输入输出格式 输入输出样例 ...

  6. 洛谷9月月赛 康娜的线段树

    题目描述 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以维护一段区间的信息,是非常 ...

  7. 【题解】康娜的线段树

    题目 小林是个程序媛,不可避免地康娜对这种人类的"魔法"产生了浓厚的兴趣,于是小林开始教她OI. 今天康娜学习了一种叫做线段树的神奇魔法,这种魔法可以维护一段区间的信息,是非常厉害 ...

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

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

  9. 洛谷 P3372 【模板】线段树 1(线段树区间加区间找)

    题目描述 如题,已知一个数列,你需要进行下面两种操作: 1.将某区间每一个数加上x 2.求出某区间每一个数的和 输入格式 第一行包含两个整数N.M,分别表示该数列数字的个数和操作的总个数. 第二行包含 ...

最新文章

  1. Android Context 详解
  2. 如何解决ORA-00054资源正忙,要求指定NOWAIT?
  3. 保证相同类型的MDI子窗体只会被打开一次的方法
  4. openssl C函数总结,
  5. java 内省 反射_Java的反射和内省
  6. MYSQL数据库应用优化
  7. 使用.Net Core实现的一个图形验证码
  8. ionic云开发系列二之调用webservice
  9. 大数据之-入门_大数据发展前景---大数据之hadoop工作笔记0005
  10. for-in和for-of,forEach和Map
  11. 3.2 如何判断Java对象的存活
  12. C++11 pair的使用
  13. linux delete快捷键,Linux 常用快捷键
  14. win7安装IIS后如何远程访问IIS
  15. python题目58:工厂流水线调度
  16. 慢就是快的人生哲理_感悟人生:慢是一种心态
  17. N级台阶(比如100级),每次可走1步,2步,3步,求总共有多少种走法?
  18. 独家专访阿里集团副总裁贾扬清:我为什么选择加入阿里巴巴?
  19. 3-2Virsh控制工具
  20. 生成式对抗网络GAN(一)—基于python实现

热门文章

  1. linux. 获得cpu利用率 arm,Linux如何统计进程的CPU利用率
  2. Android最实用的各种技能点的网址链接(每天都会更新,希望大家用的上)
  3. 《LoadRunner 12七天速成宝典》目录—导读
  4. discuz的htm模板代码分析
  5. 一个80年小子的创业道理,和所有准备创业或者正在创业的兄弟们共享
  6. SQL中的DECIMAL()函数
  7. 解决方法:ERROR: Could not install packages due to an EnvironmentError: [Errno 2] No such file or directo
  8. Android 高质量开发之崩溃优化,kotlin匿名内部类
  9. python3绘制哆啦A梦
  10. 蚁狮优化算法( Ant Lion Optimizer,ALO)-Matlab源码