中文题面

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

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

等联赛考完去学一下(逃

 //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(珂朵莉树)的更多相关文章

  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. Eclipse Explorer插件快速打开项目文件在系统资源管理器

    官网:https://github.com/Jamling/eclipse-explorer 安装: 1.在线安装 [Help]->[Eclipse Marketplace]搜索:Eclipse ...

  2. javascript创建对象总结(javascript高级程序设计)

    1.工厂模式 这样的模式抽象创建详细对象的过程.用函数封装特定的接口来创建类. function createStudent(name) { var o = new Object(); o.name ...

  3. 【python】urllib2

    urllib2.urlopen(url[, data][, timeout]) 请求url,获得请求数据,url参数可以是个String,也可以是个Request参数 没有data参数时为GET请求, ...

  4. topcoder srm 551

    div1 250pt 题意:一个长度最多50的字符串,每次操作可以交换相邻的两个字符,问,经过最多MaxSwaps次交换之后,最多能让多少个相同的字符连起来 解法:对于每种字符,枚举一个“集结点”,让 ...

  5. [转]linux下tar.gz、tar、bz2、zip等解压缩、压缩命令小结

    原文:http://www.jb51.net/LINUXjishu/43356.html ------------------------------------------------------- ...

  6. iptables防火墙以及网络协议基本原理

    一. Linux 网络安全模型 1. 防火墙: 工作在主机或者网络边缘,对进出报文使用实现定义的规则进行检测,并且由匹配的规则进行处理的一组硬件或者软件.也可能两者结合. 1) 通常使用的防火墙设备 ...

  7. The 2014 ACM-ICPC Asia Mudanjiang Regional Contest 【部分题解】

    2014牡丹江亚洲区域赛邀请赛 B题:图论题目 题解:这里 K题:想法题 分析:两种变化.加入和交换.首先:星号是n的话最少须要的数字是n+1,那么能够首先推断数字够不够,不够的话如今最前面添数字,假 ...

  8. 接口测试工具--Fiddler 的使用

    代码部分 Rules -> Customize Rules  打开Fiddler ScriptEditor,这里可以通过修改脚本中某些方法( OnBeforeRequest(oSession: ...

  9. Ubuntu16.04 下python2 | python3

    在终端分别输入python,python2,python3 python和python2默认都是python2 python3才是python3 Ubuntu下是默认没有pip的,需要自己手动安装 s ...

  10. 图像配准建立仿射变换模型并用RANSAC算法评估

    当初选方向时就由于从小几何就不好.缺乏空间想像能力才没有选择摄影測量方向而是选择了GIS. 昨天同学找我帮他做图像匹配.这我哪里懂啊,无奈我是一个别人有求于我,总是不好意思开口拒绝的人.于是乎就看着他 ...