题目链接

题意分析

当前等级为\(x\)的魔法书会对等级在\([x,inf]\)的所有人造成\(y\)的影响

所以除了求平均值之外 就是区间修改区间求和

需要使用动态开点 + 标记永久化

需要注意的是 当前点为空的话 需要返回 目标区间长度*下放标记值

CODE:

  1. #include<iostream>
  2. #include<cstdio>
  3. #include<cstring>
  4. #include<cmath>
  5. #include<algorithm>
  6. #include<cstdlib>
  7. #include<string>
  8. #include<queue>
  9. #include<map>
  10. #include<stack>
  11. #include<list>
  12. #include<set>
  13. #include<deque>
  14. #include<vector>
  15. #include<ctime>
  16. #define ll long long
  17. #define inf 0x7fffffff
  18. #define N 200080
  19. #define IL inline
  20. #define M 10008611
  21. #define D double
  22. #define R register
  23. using namespace std;
  24. template<typename T>IL void read(T &_)
  25. {
  26. T __=0,___=1;char ____=getchar();
  27. while(!isdigit(____)) {if(____=='-') ___=0;____=getchar();}
  28. while(isdigit(____)) {__=(__<<1)+(__<<3)+____-'0';____=getchar();}
  29. _=___ ? __:-__;
  30. }
  31. /*-------------OI使我快乐-------------*/
  32. ll n,m,root,tot,maxn;
  33. struct Node{
  34. ll tag,sum;
  35. Node(){tag=sum=0;}
  36. }tre[M];
  37. struct Qury{
  38. ll knd,x,y;
  39. }e[N];
  40. ll lson[M],rson[M];
  41. IL void update(ll &now,ll lenow,ll rinow,ll le,ll ri,ll d)
  42. {
  43. if(!now) now=++tot;tre[now].sum+=(ri-le+1)*d;
  44. if(lenow==le&&rinow==ri)
  45. {
  46. tre[now].tag+=d;return;
  47. }
  48. ll mid=(lenow+rinow)>>1;
  49. if(ri<=mid) update(lson[now],lenow,mid,le,ri,d);
  50. else if(mid<le) update(rson[now],mid+1,rinow,le,ri,d);
  51. else update(lson[now],lenow,mid,le,mid,d),update(rson[now],mid+1,rinow,mid+1,ri,d);
  52. }
  53. IL ll qury(ll now,ll lenow,ll rinow,ll le,ll ri,ll have)
  54. {
  55. if(!now) return (ri-le+1)*have;
  56. if(le==lenow&&rinow==ri) return tre[now].sum+(rinow-lenow+1)*have;
  57. ll mid=(lenow+rinow)>>1;
  58. if(ri<=mid) return qury(lson[now],lenow,mid,le,ri,have+tre[now].tag);
  59. else if(mid<le) return qury(rson[now],mid+1,rinow,le,ri,have+tre[now].tag);
  60. else return qury(lson[now],lenow,mid,le,mid,have+tre[now].tag)+qury(rson[now],mid+1,rinow,mid+1,ri,have+tre[now].tag);
  61. }
  62. int main()
  63. {
  64. // freopen(".in","r",stdin);
  65. // freopen(".out","w",stdout);
  66. read(n);read(m);
  67. for(R ll i=1;i<=n;++i)
  68. {
  69. read(e[i].x);read(e[i].y);
  70. e[i].knd=-1;maxn=max(maxn,e[i].x);
  71. }
  72. for(R ll i=n+1;i<=n+m;++i)
  73. {
  74. read(e[i].knd);read(e[i].x);read(e[i].y);
  75. if(e[i].knd==1) maxn=max(maxn,e[i].y);
  76. else maxn=max(maxn,e[i].x);
  77. }
  78. for(R ll i=1;i<=n;++i)
  79. {
  80. update(root,1,maxn,e[i].x,maxn,e[i].y);
  81. }
  82. for(R ll i=n+1;i<=n+m;++i)
  83. {
  84. if(e[i].knd==1)
  85. {
  86. ll tmp=qury(root,1,maxn,e[i].x,e[i].y,0);
  87. printf("%.4f\n",(1.0*(D)(tmp))/(1.0*(D)(e[i].y-e[i].x+1)));
  88. }
  89. else
  90. {
  91. update(root,1,maxn,e[i].x,maxn,e[i].y);
  92. }
  93. }
  94. // fclose(stdin);
  95. // fclose(stdout);
  96. return 0;
  97. }

HEOI 2019 RP++

P4915 帕秋莉的魔导书的更多相关文章

  1. P4915 帕秋莉的魔导书(动态开点线段树)

    题目背景 帕秋莉有一个巨大的图书馆,里面有数以万计的书,其中大部分为魔导书. 题目描述 魔导书是一种需要钥匙才能看得懂的书,然而只有和书写者同等或更高熟练度的人才能看得见钥匙.因此,每本魔导书都有它自 ...

  2. P4910 帕秋莉的手环

    题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...

  3. [Luogu] P4910 帕秋莉的手环

    题目背景 帕秋莉是蕾米莉亚很早结识的朋友,现在住在红魔馆地下的大图书馆里.不仅擅长许多魔法,还每天都会开发出新的魔法.只是身体比较弱,因为哮喘,会在咏唱符卡时遇到麻烦. 她所用的属性魔法,主要是生命和 ...

  4. 【Cogs2187】帕秋莉的超级多项式(多项式运算)

    [Cogs2187]帕秋莉的超级多项式(多项式运算) 题面 Cogs 题解 多项式运算模板题 只提供代码了.. #include<iostream> #include<cstdio& ...

  5. cogs 998. [東方S2] 帕秋莉·诺蕾姬

    二次联通门 : cogs 998. [東方S2] 帕秋莉·诺蕾姬 交上去后发现自己没上榜 就想着加点黑科技 把循环展开一下 结果WA了.. 万恶的姆Q /* cogs 998. [東方S2] 帕秋莉· ...

  6. 【HZOI2015】帕秋莉的超级多项式

    题面 题目分析 超级模板题: 多项式乘法 多项式求逆 多项式开根 多项式求导 多项式求积分 多项式求对数 多项式求自然对数为底的指数函数 多项式快速幂 代码实现 #include<iostrea ...

  7. COGS2187 [HZOI 2015] 帕秋莉的超级多项式

    什么都别说了,咱心态已经炸了... question 题目戳这里的说... 其实就是叫你求下面这个式子的导函数: noteskey 其实是道板子题呢~ 刚好给我们弄个多项式合集的说... 各种板子粘贴 ...

  8. 洛谷 P4910 帕秋莉的手环 矩阵乘法+快速幂详解

    矩阵快速幂解法: 这是一个类似斐波那契数列的矩乘快速幂,所以推荐大家先做一下下列题目:(会了,差不多就是多倍经验题了) 注:如果你不会矩阵乘法,可以了解一下P3390的题解 P1939 [模板]矩阵加 ...

  9. COGS 2189 帕秋莉的超级多项式

    放模板啦! 以后打比赛的时候直接复制过来. 说句实话vector的效率真的不怎么样,但是似乎也还行,最主要是……写得比较爽. #include <cstdio> #include < ...

随机推荐

  1. sql unsigned

    1.数字类型无符号化,取0以上的值    学习传送门  http://www.cnblogs.com/blankqdb/archive/2012/11/03/blank_qdb.html

  2. 8-matlab-gui-显示图片有坐标刻度问题

    在图片上显示图片时,总是有图片,一遍做法是使得刻度为空就可了: 在你的每一个axes的CreateFcn函数中添加一下代码即可:set(hObject,'xTick',[]);set(hObject, ...

  3. 枚举Enum转换为List,获取枚举的描述

    代码: public class EnumberHelper { public static List<EnumberEntity> EnumToList<T>() { Lis ...

  4. Django模板层

    一:模板简介 二:模板语法值变量 三: 模板之过滤器 四: 模板之标签 五:自定义标签和过滤器   一:模板简介 def current_datetime(request): now=datetime ...

  5. windows 下mongodb 副本建创建

    步骤: 一.安装mongodb 二.将安装的mongodb 复制2份 如图: 三.修改配置文件 dbpath=C:\mongofuben\zhu\data logpath=C:\mongofuben\ ...

  6. Array对象的创建及其操作方法

    一.创建数组,即实例化数组对象      有三种方式:1. new Array();                          2.new Array(size);               ...

  7. 团体程序设计天梯赛L2-001 紧急救援 2017-03-22 17:25 93人阅读 评论(0) 收藏

    L2-001. 紧急救援 时间限制 200 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 作者 陈越 作为一个城市的应急救援队伍的负责人,你有一张特殊的全国 ...

  8. CodeForces - 669D——(思维题)

    Little Artem is fond of dancing. Most of all dances Artem likes rueda — Cuban dance that is danced b ...

  9. pro2

    #include<iostream> double sum(int n,dounle[]) {  double  array[100]; foe(int i=0;i<100;i++; ...

  10. 自我介绍及注册github和上传文件

    自我介绍: 周侃 年龄20 喜好:玩游戏,赚钱,交际 理想:想要改变中国手游界颓靡的时代,让它进入新次元. 注册github,以及上传文件: 今天给大家来讲解下如何注册githup 当我们打开gith ...