中文题面

珂朵莉树的板子……这篇文章很不错

据说还有奈芙莲树和瑟尼欧里斯树……

等联赛考完去学一下(逃

  1. //minamoto
  2. #include<bits/stdc++.h>
  3. #define IT set<node>::iterator
  4. #define ll long long
  5. using namespace std;
  6. const int mod7=1e9+,mod9=1e9+,N=1e5+;
  7. ll ksm(ll a,ll b,ll mod){
  8. ll res=;a%=mod;
  9. while(b){
  10. if(b&) res=res*a%mod;
  11. a=a*a%mod,b>>=;
  12. }
  13. return res;
  14. }
  15. struct node{
  16. int l,r;mutable ll v;
  17. node(int L,int R=-,ll V=):l(L),r(R),v(V){}
  18. inline bool operator<(const node &b)const
  19. {return l<b.l;}
  20. };
  21. set<node> s;
  22. IT split(int pos){
  23. IT it=s.lower_bound(node(pos));
  24. if(it!=s.end()&&it->l==pos) return it;
  25. --it;
  26. int l=it->l,r=it->r;ll v=it->v;
  27. s.erase(it),s.insert(node(l,pos-,v));
  28. return s.insert(node(pos,r,v)).first;
  29. }
  30. void add(int l,int r,ll val=){
  31. IT itr=split(r+),itl=split(l);
  32. for(;itl!=itr;++itl) itl->v+=val;
  33. }
  34. void assign(int l,int r,ll val=){
  35. IT itr=split(r+),itl=split(l);
  36. s.erase(itl,itr),s.insert(node(l,r,val));
  37. }
  38. ll rk(int l,int r,int k){
  39. vector<pair<ll,int> > mp;
  40. IT itr=split(r+),itl=split(l);
  41. mp.clear();
  42. for(;itl!=itr;++itl)
  43. mp.push_back(pair<ll,int>(itl->v,itl->r-itl->l+));
  44. sort(mp.begin(),mp.end());
  45. for(vector<pair<ll,int> >::iterator it=mp.begin();it!=mp.end();++it){
  46. k-=it->second;
  47. if(k<=) return it->first;
  48. }
  49. return -1ll;
  50. }
  51. ll sum(int l,int r,int ex,int mod){
  52. IT itr=split(r+),itl=split(l);ll res=;
  53. for(;itl!=itr;++itl)
  54. res=(res+1ll*(itl->r-itl->l+)*ksm(itl->v,ex,mod))%mod;
  55. return res;
  56. }
  57. int n,m;ll seed,vmax;
  58. ll rnd(){
  59. ll res=seed;seed=(seed*+)%mod7;
  60. return res;
  61. }
  62. ll a[N];
  63. int main(){
  64. // freopen("testdata.in","r",stdin);
  65. scanf("%d %d %lld %lld",&n,&m,&seed,&vmax);
  66. for(int i=;i<=n;++i){
  67. a[i]=(rnd()%vmax)+,s.insert(node(i,i,a[i]));
  68. }
  69. s.insert(node(n+,n+,));
  70. int lines=;
  71. for(int i=;i<=m;++i){
  72. int op=int(rnd()%)+;
  73. int l=int(rnd()%n)+;
  74. int r=int(rnd()%n)+;
  75. if(l>r) swap(l,r);int x,y;
  76. if(op==) x=int(rnd()%(r-l+))+;
  77. else x=int(rnd()%vmax)+;
  78. if(op==) y=int(rnd()%vmax)+;
  79. switch(op){
  80. case :add(l,r,x);break;
  81. case :assign(l,r,x);break;
  82. case :printf("%lld\n",rk(l,r,x));break;
  83. case :printf("%lld\n",sum(l,r,x,y));break;
  84. }
  85. }
  86. return ;
  87. }

CF896C Willem, Chtholly and Seniorious(珂朵莉树)的更多相关文章

  1. [CF896C]Willem, Chtholly and Seniorious(珂朵莉树)

    https://www.cnblogs.com/WAMonster/p/10181214.html 主要用于支持含有较难维护的区间操作与查询的问题,要求其中区间赋值操作(assign())是纯随机的. ...

  2. [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)

    无聊学了一下珂朵莉树 珂朵莉树好哇,是可以维护区间x次方和查询的高效数据结构. 思想大致就是一个暴力(相对而言)的树形数据结构 lxl毒瘤太强了,发明了ODT算法(Old Driver Tree老司机 ...

  3. 【ODT】cf896C - Willem, Chtholly and Seniorious

    仿佛没用过std::set Seniorious has n pieces of talisman. Willem puts them in a line, the i-th of which is ...

  4. 珂朵莉树(Chtholly Tree)学习笔记

    珂朵莉树(Chtholly Tree)学习笔记 珂朵莉树原理 其原理在于运用一颗树(set,treap,splay......)其中要求所有元素有序,并且支持基本的操作(删除,添加,查找......) ...

  5. [CF896C]Willem, Chtholly and Seniorious

    题目大意:有$n$个数,有$m$次$4$种操作: l r x :将$[l,r]$区间所有数加上$x$ l r x :将$[l,r]$区间所有数变成$x$ l r k :输出$[l,r]$区间第$k$大 ...

  6. [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解

    参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...

  7. 『珂朵莉树 Old Driver Tree』

    珂朵莉树 珂朵莉树其实不是树,只是一个借助平衡树实现的数据结构,主要是对于有区间赋值的数据结构题,可以用很暴力的代码很高效地完成任务,当然这是建立在数据随机的基础上的. 即使数据不是随机的,写一个珂朵 ...

  8. 「学习笔记」珂朵莉树 ODT

    珂朵莉树,也叫ODT(Old Driver Tree 老司机树) 从前有一天,珂朵莉出现了... 然后有一天,珂朵莉树出现了... 看看图片的地址 Codeforces可还行) 没错,珂朵莉树来自Co ...

  9. 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)

    洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...

随机推荐

  1. HDU 1074 Doing Homework【状态压缩DP】

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...

  2. 将Sublime Text 2搭建成一个好用的IDE(转)

    原文地址 将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime T ...

  3. jQuery选择器特殊字符与属性空格问题

    一.选择器中含有特殊符号的注意事项 1.选择器中含有“.”.“#”.“(”或“]”等特殊字符 根据W3C的规定,属性值中是不能含有这些特殊字符的,但在实际项目中偶尔会遇到表达式中含有“#”和“.”等特 ...

  4. Struts2框架起源

    曾经也用过S2SH框架做过几个项目,都不是工作中的,学习WEB开发的时候接触的第一套框架也是S2SH,可是工作之后一直没实用到S2SH 框架进行开发. 感觉曾经用这个框架的时候根本没有深入去了解这个框 ...

  5. Redis实践系列丨Codis数据迁移原理与优化

    Codis介绍 Codis 是一种Redis集群的实现方案,与Redis社区的Redis cluster类似,基于slot的分片机制构建一个更大的Redis节点集群,对于连接到codis的Redis客 ...

  6. Codeforces Round #419 (Div. 1) C. Karen and Supermarket 树形DP

    C. Karen and Supermarket     On the way home, Karen decided to stop by the supermarket to buy some g ...

  7. 内部消息 微软中国云计算 内測Azure免费账号 赶紧申请 错过不再有

    内部消息 微软中国云计算 顶级内測Azure免费账号 火热申请 过期不再有! 微软MSDN俱乐部  29754721, [一大波Azure免费账号来袭]Windows Azure再次开启示放免费试用账 ...

  8. jetty与tomcat

    相同点: 1.tomcat与jetty都是一种servlet引擎,他们都支持标准的servlet规范和javaEE规范 不同点: 1.架构比较 jetty相比tomcat更为简单 jetty架构是基于 ...

  9. redis与spring整合·

    单机版: 配置spring配置文件applicationContext.xml <?xml version="1.0" encoding="UTF-8"? ...

  10. jvm部分知识总结

    1.jvm有三种执行模式,分别是解释执行,混合执行和编译执行,默认情况是混合执行模式. java version " Java(TM) SE Runtime Environment (bui ...