CF896C Willem, Chtholly and Seniorious(珂朵莉树)
珂朵莉树的板子……这篇文章很不错
据说还有奈芙莲树和瑟尼欧里斯树……
等联赛考完去学一下(逃
- //minamoto
- #include<bits/stdc++.h>
- #define IT set<node>::iterator
- #define ll long long
- using namespace std;
- const int mod7=1e9+,mod9=1e9+,N=1e5+;
- ll ksm(ll a,ll b,ll mod){
- ll res=;a%=mod;
- while(b){
- if(b&) res=res*a%mod;
- a=a*a%mod,b>>=;
- }
- return res;
- }
- struct node{
- int l,r;mutable ll v;
- node(int L,int R=-,ll V=):l(L),r(R),v(V){}
- inline bool operator<(const node &b)const
- {return l<b.l;}
- };
- set<node> s;
- IT split(int pos){
- IT it=s.lower_bound(node(pos));
- if(it!=s.end()&&it->l==pos) return it;
- --it;
- int l=it->l,r=it->r;ll v=it->v;
- s.erase(it),s.insert(node(l,pos-,v));
- return s.insert(node(pos,r,v)).first;
- }
- void add(int l,int r,ll val=){
- IT itr=split(r+),itl=split(l);
- for(;itl!=itr;++itl) itl->v+=val;
- }
- void assign(int l,int r,ll val=){
- IT itr=split(r+),itl=split(l);
- s.erase(itl,itr),s.insert(node(l,r,val));
- }
- ll rk(int l,int r,int k){
- vector<pair<ll,int> > mp;
- IT itr=split(r+),itl=split(l);
- mp.clear();
- for(;itl!=itr;++itl)
- mp.push_back(pair<ll,int>(itl->v,itl->r-itl->l+));
- sort(mp.begin(),mp.end());
- for(vector<pair<ll,int> >::iterator it=mp.begin();it!=mp.end();++it){
- k-=it->second;
- if(k<=) return it->first;
- }
- return -1ll;
- }
- ll sum(int l,int r,int ex,int mod){
- IT itr=split(r+),itl=split(l);ll res=;
- for(;itl!=itr;++itl)
- res=(res+1ll*(itl->r-itl->l+)*ksm(itl->v,ex,mod))%mod;
- return res;
- }
- int n,m;ll seed,vmax;
- ll rnd(){
- ll res=seed;seed=(seed*+)%mod7;
- return res;
- }
- ll a[N];
- int main(){
- // freopen("testdata.in","r",stdin);
- scanf("%d %d %lld %lld",&n,&m,&seed,&vmax);
- for(int i=;i<=n;++i){
- a[i]=(rnd()%vmax)+,s.insert(node(i,i,a[i]));
- }
- s.insert(node(n+,n+,));
- int lines=;
- for(int i=;i<=m;++i){
- int op=int(rnd()%)+;
- int l=int(rnd()%n)+;
- int r=int(rnd()%n)+;
- if(l>r) swap(l,r);int x,y;
- if(op==) x=int(rnd()%(r-l+))+;
- else x=int(rnd()%vmax)+;
- if(op==) y=int(rnd()%vmax)+;
- switch(op){
- case :add(l,r,x);break;
- case :assign(l,r,x);break;
- case :printf("%lld\n",rk(l,r,x));break;
- case :printf("%lld\n",sum(l,r,x,y));break;
- }
- }
- return ;
- }
CF896C Willem, Chtholly and Seniorious(珂朵莉树)的更多相关文章
- [CF896C]Willem, Chtholly and Seniorious(珂朵莉树)
https://www.cnblogs.com/WAMonster/p/10181214.html 主要用于支持含有较难维护的区间操作与查询的问题,要求其中区间赋值操作(assign())是纯随机的. ...
- [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)
无聊学了一下珂朵莉树 珂朵莉树好哇,是可以维护区间x次方和查询的高效数据结构. 思想大致就是一个暴力(相对而言)的树形数据结构 lxl毒瘤太强了,发明了ODT算法(Old Driver Tree老司机 ...
- 【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 ...
- 珂朵莉树(Chtholly Tree)学习笔记
珂朵莉树(Chtholly Tree)学习笔记 珂朵莉树原理 其原理在于运用一颗树(set,treap,splay......)其中要求所有元素有序,并且支持基本的操作(删除,添加,查找......) ...
- [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$大 ...
- [转]我的数据结构不可能这么可爱!——珂朵莉树(ODT)详解
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵 ...
- 『珂朵莉树 Old Driver Tree』
珂朵莉树 珂朵莉树其实不是树,只是一个借助平衡树实现的数据结构,主要是对于有区间赋值的数据结构题,可以用很暴力的代码很高效地完成任务,当然这是建立在数据随机的基础上的. 即使数据不是随机的,写一个珂朵 ...
- 「学习笔记」珂朵莉树 ODT
珂朵莉树,也叫ODT(Old Driver Tree 老司机树) 从前有一天,珂朵莉出现了... 然后有一天,珂朵莉树出现了... 看看图片的地址 Codeforces可还行) 没错,珂朵莉树来自Co ...
- 洛谷AT2342 Train Service Planning(思维,动态规划,珂朵莉树)
洛谷题目传送门 神仙思维题还是要写点东西才好. 建立数学模型 这种很抽象的东西没有式子描述一下显然是下不了手的. 因为任何位置都以\(k\)为周期,所以我们只用关心一个周期,也就是以下数都在膜\(k\ ...
随机推荐
- HDU 1074 Doing Homework【状态压缩DP】
题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=1074 题意: 给定作业截止时间和完成作业所需时间,比截止时间晚一天扣一分,问如何安排作业的顺序使得最 ...
- 将Sublime Text 2搭建成一个好用的IDE(转)
原文地址 将Sublime Text 2搭建成一个好用的IDE 说起编辑器,可能大部分人要推荐的是Vim和Emacs,本人用过Vim,功能确实强大,但是不是很习惯,之前一直有朋友推荐SUblime T ...
- jQuery选择器特殊字符与属性空格问题
一.选择器中含有特殊符号的注意事项 1.选择器中含有“.”.“#”.“(”或“]”等特殊字符 根据W3C的规定,属性值中是不能含有这些特殊字符的,但在实际项目中偶尔会遇到表达式中含有“#”和“.”等特 ...
- Struts2框架起源
曾经也用过S2SH框架做过几个项目,都不是工作中的,学习WEB开发的时候接触的第一套框架也是S2SH,可是工作之后一直没实用到S2SH 框架进行开发. 感觉曾经用这个框架的时候根本没有深入去了解这个框 ...
- Redis实践系列丨Codis数据迁移原理与优化
Codis介绍 Codis 是一种Redis集群的实现方案,与Redis社区的Redis cluster类似,基于slot的分片机制构建一个更大的Redis节点集群,对于连接到codis的Redis客 ...
- 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 ...
- 内部消息 微软中国云计算 内測Azure免费账号 赶紧申请 错过不再有
内部消息 微软中国云计算 顶级内測Azure免费账号 火热申请 过期不再有! 微软MSDN俱乐部 29754721, [一大波Azure免费账号来袭]Windows Azure再次开启示放免费试用账 ...
- jetty与tomcat
相同点: 1.tomcat与jetty都是一种servlet引擎,他们都支持标准的servlet规范和javaEE规范 不同点: 1.架构比较 jetty相比tomcat更为简单 jetty架构是基于 ...
- redis与spring整合·
单机版: 配置spring配置文件applicationContext.xml <?xml version="1.0" encoding="UTF-8"? ...
- jvm部分知识总结
1.jvm有三种执行模式,分别是解释执行,混合执行和编译执行,默认情况是混合执行模式. java version " Java(TM) SE Runtime Environment (bui ...