题解:

好像是什么替罪羊树

然后看了几个题解

然后就抄了一边

代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. const int N=;
  4. int n,m,rt,R,mx[N],pos[N],id[N],top;
  5. double a[N];
  6. char ch[];
  7. struct data
  8. {
  9. int l,r;
  10. friend bool operator>(data x,data y)
  11. {
  12. if (a[x.l]>a[y.l])return ;
  13. if (a[x.l]==a[y.l]&&a[x.r]>a[y.r])return ;
  14. return ;
  15. }
  16. friend bool operator==(data x,data y)
  17. {
  18. if (x.l!=y.l||x.r!=y.r)return ;
  19. return ;
  20. }
  21. };
  22. struct sctree
  23. {
  24. data v[N];
  25. int cnt,size[N],ls[N],rs[N];
  26. void dfs(int k)
  27. {
  28. if(!k)return;
  29. dfs(ls[k]);
  30. id[++top]=k;
  31. dfs(rs[k]);
  32. }
  33. void build(int &k,int l,int r,double lv,double rv)
  34. {
  35. if(l>r){k=;return;}
  36. double mv=(lv+rv)/2.0;
  37. int mid=(l+r)/;
  38. k=id[mid];a[k]=mv;
  39. build(ls[k],l,mid-,lv,mv);
  40. build(rs[k],mid+,r,mv,rv);
  41. size[k]=size[ls[k]]+size[rs[k]]+;
  42. }
  43. void rebuild(int &k,double lv,double rv)
  44. {
  45. top=;
  46. dfs(k);
  47. build(k,,top,lv,rv);
  48. }
  49. int insert(int &k,double lv,double rv,data val)
  50. {
  51. double mv=(lv+rv)/2.0;
  52. if (!k)
  53. {
  54. k=++cnt;a[k]=mv;v[k]=val;size[k]=;
  55. return k;
  56. }
  57. int p;
  58. if (val==v[k])return k;
  59. else
  60. {
  61. size[k]++;
  62. if (val>v[k])p=insert(rs[k],mv,rv,val);
  63. else p=insert(ls[k],lv,mv,val);
  64. }
  65. if (size[k]*0.75>max(size[ls[k]],size[rs[k]]))
  66. {
  67. if (R)
  68. {
  69. if(ls[k]==R)rebuild(ls[k],lv,mv);
  70. else rebuild(rs[k],mv,rv);
  71. R=;
  72. }
  73. }
  74. else R=k;
  75. return p;
  76. }
  77. }sc;
  78. void modify(int k,int l,int r,int v)
  79. {
  80. int mid=(l+r)>>;
  81. if (l==r){mx[k]=l;return;}
  82. if (v<=mid)modify(k<<,l,mid,v);
  83. else modify(k<<|,mid+,r,v);
  84. int x=mx[k<<],y=mx[k<<|];
  85. if (a[pos[x]]>=a[pos[y]])mx[k]=x;
  86. else mx[k]=y;
  87. }
  88. int query(int k,int l,int r,int x,int y)
  89. {
  90. int mid=(l+r)>>;
  91. if (l==x&&y==r)return mx[k];
  92. int t=,p=;
  93. if (x<=mid)
  94. {
  95. p=query(k<<,l,mid,x,min(mid,y));
  96. if (a[pos[p]]>a[pos[t]])t=p;
  97. }
  98. if (y>mid)
  99. {
  100. p=query(k<<|,mid+,r,max(x,mid+),y);
  101. if(a[pos[p]]>a[pos[t]])t=p;
  102. }
  103. return t;
  104. }
  105. int main()
  106. {
  107. scanf("%d%d",&n,&m);
  108. a[]=-;
  109. sc.insert(rt,,,(data){,});
  110. for (int i=;i<=n;i++)pos[i]=;
  111. for (int i=;i<=n;i++)modify(,,n,i);
  112. int l,r,K;
  113. for (int i=;i<=m;i++)
  114. {
  115. scanf("%s%d%d",ch+,&l,&r);
  116. if (ch[]=='C')
  117. {
  118. scanf("%d",&K);
  119. pos[K]=sc.insert(rt,,,(data){pos[l],pos[r]});
  120. if(R)sc.rebuild(rt,,);R=;
  121. modify(,,n,K);
  122. }
  123. else printf("%d\n",query(,,n,l,r));
  124. }
  125. return ;
  126. }

bzoj3600的更多相关文章

  1. bzoj3600: 没有人的算术

    题意:太难说了..手动去看吧反正不是权限题. 膜拜VFK大爷的神题! 其实一开始思路挺清楚的,如果我们能做到用一个实数去代表"数",这就是裸的动态区间最值查询. 关键是怎么用实数去 ...

  2. BZOJ3600:没有人的算术

    传送门 如果能给每个 \(pair\) 按照权值编号就好了 假设之前已经有了所有的权值的编号,现在考虑编号新的 \(pair\) 如果看过了陈立杰的论文的话,不难得到一个重量平衡树的做法 给树上每个子 ...

  3. [BZOJ3600] 没有人的算术 [重量平衡树+权值线段树]

    题面 传送门 思路 这道题目是陈立杰论文<重量平衡树和后缀平衡树在信息学奥赛中的应用 >中关于重量平衡树维护序列排名算法的一个应用 具体方法为:令根节点保存一个实数区间$[0,1]$ 若当 ...

  4. 「BZOJ3600」没有人的算术 替罪羊树+线段树

    题目描述 过长--不想发图也不想发文字,所以就发链接吧-- 没有人的算术 题解 \(orz\)神题一枚 我们考虑如果插入的数不是数对,而是普通的数,这就是一道傻题了--直接线段树一顿乱上就可以了. 于 ...

  5. 【BZOJ3600】没有人的算术 - 替罪羊树+线段树

    题意: 题解: Orz vfleaking……真·神题 做法大概是先把题意中定义的“数”都赋一个实数权值,用平衡树来维护整个从大到小排序过的序列,再用线段树查询最值: 这样做为什么是对的?考虑插入一个 ...

  6. 【BZOJ3600】没有人的算术(替罪羊树+线段树)

    点此看题面 大致题意: 定义任意数对\(>0\),数对之间比大小先比第一位.后比第二位,一开始数列全为\(0\),要求你支持\(a_k=(a_x,a_y)\)和询问区间最大值所在位置两种操作. ...

  7. shanquan2的两年三题系列

    好像只有2个月就退役啦 不管了,先说一下哪三题:多点求值.lcm.替罪羊树(bzoj3065) [upd0]2016.3.29 多点求值A掉啦,myy卡常数sxbk(不是说好的是shanquan2出的 ...

  8. 3682: Phorni 后缀平衡树 线段树

    国际惯例的题面: 考虑如果没有强制在线我们能怎么水掉这个题,先构造出字符串,各种方法求一下后缀数组,然后线段树维护区间rank最小的位置即可.然而他要求强制在线,支持插入后缀,并比较后缀大小(求ran ...

随机推荐

  1. Hive练习

    一.基础DDL练习 SHOW DATABASES; CREATE DATABASE IF NOT EXISTS db1 COMMENT 'Our database db1'; SHOW DATABAS ...

  2. 20145316许心远《Java学习笔记》第三周总结

    20145316许心远<Java程序设计>第3周学习总结 教材学习内容总结 一.定义类: 类定义时使用class关键字 如果要将x绑定到新建的对象上,可以使用"="制定 ...

  3. iOS开发之NSUserDefaults

    在ios中偏好设置保存用户配置的对象 //NSUserDefaults读取 //获取标准函数对象 //通过对象获取名称下NSMutableDictionary数据 NSUserDefaults *de ...

  4. Atom插件无法下载安装解决办法,Atom使用教程,Atom常用插件

    使用教程http://wiki.jikexueyuan.com/project/atom/plug-in.html atom通过setting中无法下载插件,通过apm也无法下载插件,可能是网络.co ...

  5. Java管程解决生产者消费者问题

    同样是实验存档.//.. 依然以生产者消费者问题作为背景. 管程(=“资源管理程序”)将资源和对资源的操作封装起来,资源使用者通过接口操作资源就ok,不用去考虑进程同步的问题. 管程: package ...

  6. php 安装Memcache扩展

    转载地址:http://www.tuicool.com/articles/EB3imm 文章概述:由于当前机器安装的php,是用yum安装,现在需要使用到memadmin做一些监控, memadmin ...

  7. [随记][asp.net基础]Page_Load和OnLoad

    标题:[随记][asp.net基础]Page_Load和OnLoad 一.前言 东西好久不用.不想,就会忘,所以没办法,只好记下来. 二.正文 aspx页面加载的时候会自动执行Page_Load,也会 ...

  8. MR案例:路径过滤PathFilter

    问题描述:现有一批cookie日志,按照日期进行存放,如目录 “dir/2015-08-08” 下存放2015-08-08这一天的所有cookie.而目录 “/2015-08-08/” 下又根据数据文 ...

  9. iOS开发进阶 - 基于PhotoKit的图片选择器

    移动端访问不佳,请访问我的个人博客 很早之前就用OC把代码写完了并用在项目中了,一直没时间整理,现在用swift重写一份,并且更加详细的来了解这个Photos框架,下面是我集合苹果官方文档和其他大神的 ...

  10. NAT模式下远程连接centos6虚拟机与虚拟机网络配置

    最近装了centos,但是没有网络,也无法远程连接.关键是虚拟机中没有ip地址. 网上方法很多,但是每个人情况不一样,所以不尽适用. 1.解决这个问题,首先保证你的vmware的dhcp服务和net服 ...