【线段树 泰勒展开】Codechef April Challenge 2018 Chef at the Food Fair

第一次写泰勒展开;本地和CC差距好大

题目大意

大厨住的城市里办了一场美食节。一条街上开设了$N$个摊位,编号为$1∼N$。这天开始时,第$i$个摊位的食物会导致食物中毒的概率是$P_i$。在这一天中,大厨发现某些摊位可能会根据顾客的反馈提供没那么有毒的食物。你需要处理$Q$个询问,询问有以下两类:

0 L R:求出:如果要吃遍$[L,R]$内所有摊位的食物,那么不会食物中毒的概率是多少;
1 L R T:$[L,R]$中的所有摊位的食物会导致食物中毒的概率变为了原来的$T$倍。$T$是一个小于$1$的非负实数。

对于前 $20\%$ 的数据,$n,m\le 2000$

另有 $20\%$ 的数据,$T\le 0.5$

对于 $100\%$ 的数据,满足 $n,m\le 10^5,0\le T<1,P_i\le 1,1\le L\le R\le n$,保证输入数据不超过 $6$ 位小数。


题目分析

注意到维护的操作有些不同寻常。

  • 第一:维护的是$\prod (1-P_i)$
  • 第二:每次操作是区间乘法

对于要求支持区间乘的问题,有一种转化套路是将它取$\ln$,那么问题就变成了维护区间和。

那么这题中还需要处理$\ln (1-P_i)$,将它泰勒展开得到$\ln(1-x)=x-{1\over 2}x^2-{1\over 3}x^3-...-{1\over n}x^n+R(x)$。我们一如既往地爆精度,只需要保留这个式子的前$MAXD=100$项和。维护时则是开$MAXD$颗线段树对每类次项分别处理区间乘法。

需要注意的是,这题需要一些常数技巧。我最先是开了$f[MAXD]$颗封装好的线段树,但由于数组的第一维是更频繁访问的一维,所以实际运行效率会比较低。如果采用形如$f[maxn<<2][MAXD]$的做法,就会快非常多。

非常迷的一点是,同一份代码在本地考试的数据下,极限数据要跑个4~5s;但是交到CC上就rank2了……

 

 1 #include<bits/stdc++.h>
 2 const int maxn = 100035;
 3 const double eps = 1e-12;
 4 
 5 int n,m,MAXD;
 6 double p[maxn],w[maxn],K,S;
 7 double f[maxn<<2][103],tag[maxn<<2];
 8 
 9 int read()
10 {
11     char ch = getchar();
12     int num = 0, fl = 1;
13     for (; !isdigit(ch); ch=getchar())
14         if (ch=='-') fl = -1;
15     for (; isdigit(ch); ch=getchar())
16         num = (num<<1)+(num<<3)+ch-48;
17     return num*fl;
18 }
19 void pushup(int rt)
20 {
21     for (int i=1; i<=MAXD; i++)
22         f[rt][i] = f[rt<<1][i]+f[rt<<1|1][i];
23 }
24 void pushdown(int rt)
25 {
26     double v = tag[rt], s = tag[rt];
27     if (fabs(1.0-v) > eps){
28         tag[rt<<1] *= v, tag[rt<<1|1] *= v;
29         for (int i=1; i<=MAXD; i++)
30             f[rt<<1][i] *= s, f[rt<<1|1][i] *= s, s *= v;
31         tag[rt] = 1.0;
32     }
33 }
34 void build(int rt, int l, int r)
35 {
36     tag[rt] = 1.0;
37     if (l==r){
38         for (int i=1; i<=MAXD; i++)
39             w[l] *= p[l], f[rt][i] = w[l]/i;
40         return;
41     }
42     int mid = (l+r)>>1;
43     build(rt<<1, l, mid);
44     build(rt<<1|1, mid+1, r);
45     pushup(rt);
46 }
47 double query(int rt, int L, int R, int l, int r)
48 {
49     if (L <= l&&r <= R){
50         double ret = 0;
51         for (int i=1; i<=MAXD; i++)
52             ret += f[rt][i];
53         return ret;
54     }
55     int mid = (l+r)>>1;
56     double ret = 0;
57     pushdown(rt);
58     if (L <= mid) ret += query(rt<<1, L, R, l, mid);
59     if (R > mid) ret += query(rt<<1|1, L, R, mid+1, r);
60     return ret;
61 }
62 void modify(int rt, int L, int R, int l, int r, double c)
63 {
64     if (L <= l&&r <= R){
65         double s = c;
66         tag[rt] *= s;
67         for (int i=1; i<=MAXD; i++)
68             f[rt][i] *= s, s *= c;
69         return;
70     }
71     int mid = (l+r)>>1;
72     pushdown(rt);
73     if (L <= mid) modify(rt<<1, L, R, l, mid, c);
74     if (R > mid) modify(rt<<1|1, L, R, mid+1, r, c);
75     pushup(rt);
76 }
77 int main()
78 {
79     n = read(), m = read();
80     for (int i=1; i<=n; i++) scanf("%lf",&p[i]), w[i] = 1.0;
81     MAXD = 100;
82     build(1, 1, n);
83     for (int i=1; i<=m; i++)
84     {
85         int opt = read(), l = read(), r = read();
86         if (opt){
87             scanf("%lf",&K);
88             modify(1, l, r, 1, n, K);
89         }else{
90             K = query(1, l, r, 1, n);
91             printf("%.8lf\n",exp(-K));
92         }
93     }
94     return 0;
95 }

 

 

 

 

 

END

转载于:https://www.cnblogs.com/antiquality/p/10385631.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
智慧校园信息化系统解决方案旨在通过先进的信息技术,实现教育的全方位创新和优质资源的普及共享。该方案依据国家和地方政策背景,如教育部《教育信息化“十三五”规划》和《教育信息化十年发展规划》,以信息技术的革命性影响为指导,推进教育信息化建设,实现教育思想和方法的创新。 技术发展为智慧校园建设提供了强有力的支撑。方案涵盖了互连互通、优质资源共享、宽带网络、移动APP、电子书包、电子教学白板、3D打印、VR虚拟教学等技术应用,以及大数据和云计算技术,提升了教学数据记录和分析水平。此外,教育资源公共服务平台、教育管理公共服务平台等平台建设,进一步提高了教学、管控的效率。 智慧校园系统由智慧教学、智慧管控和智慧公三大部分组成,各自具有丰富的应用场景。智慧教学包括微课、公开课、精品课等教学资源的整合和共享,支持在线编辑、录播资源、教学分析等功能。智慧管控则通过平安校园、可视对讲、紧急求助、视频监控等手段,保障校园安全。智慧公则利用远程视讯、无纸化会议、数字会议等技术,提高行政效率和会议质量。 教育录播系统作为智慧校园的重要组成部分,提供了一套满足学校和教育局需求的解决方案。它包括标准课室、微格课室、精品课室等,通过自动五机位方案、高保真音频采集、一键式录课等功能,实现了优质教学资源的录制和共享。此外,录播系统还包括互动教学、录播班班通、教育中控、校园广播等应用,促进了教育资源的均衡化发展。 智慧公的另一重点是无纸化会议和数字会议系统的建设,它们通过高效的文件管理、会议文件保密处理、本地会议的音频传输和摄像跟踪等功能,实现了会议的高效化和集中管控。这些系统不仅提高了会议的效率和质量,还通过一键管控、无线管控等设计,简化了操作流程,使得会议更加便捷和环保。 总之,智慧校园信息化系统解决方案通过整合先进的信息技术和教学资源,不仅提升了教育质量和管理效率,还为实现教育均衡化和资源共享提供了有力支持,推动了教育现代化的进程。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值