[CF896C]Willem, Chtholly and Seniorious(珂朵莉树)
https://www.cnblogs.com/WAMonster/p/10181214.html
主要用于支持含有较难维护的区间操作与查询的问题,要求其中区间赋值操作(assign())是纯随机的。
注意要先split(r+1)再split(l),最好最后设一个点(n+1,n+1,0)
#include<set>
#include<cstdio>
#include<algorithm>
#include<iostream>
#define rep(i,l,r) for (int i=(l); i<=(r); i++)
typedef long long ll;
using namespace std; const int N=;
int n,m,x,y,mx; ll seed;
struct P{ int l,r; mutable ll v; };
bool operator <(const P &a,const P &b){ return a.l<b.l; }
set<P>S;
typedef set<P>::iterator sit;
pair<ll,int>ve[N]; ll ksm(ll a,ll b,ll mod){
ll res=; a%=mod;
for (; b; a=a*a%mod,b>>=)
if (b & ) res=res*a%mod;
return res;
} sit split(int pos){
sit it=S.lower_bound((P){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((P){l,pos-,v});
return S.insert((P){pos,r,v}).first;
} void assign(int l,int r,ll v){
sit it2=split(r+),it1=split(l);
S.erase(it1,it2); S.insert((P){l,r,v});
} void add(int l,int r,ll v){
sit it2=split(r+),it1=split(l);
for (sit it=it1; it!=it2; it++) it->v+=v;
} ll kth(int l,int r,int k){
sit it2=split(r+),it1=split(l); int tot=;
for (sit it=it1; it!=it2; it++) ve[++tot]=pair<ll,int>(it->v,(it->r)-(it->l)+);
sort(ve+,ve+tot+);
rep(i,,tot){
k-=ve[i].second;
if (k<=) return ve[i].first;
}
return ;
} ll que(int l,int r,int x,ll y){
sit it2=split(r+),it1=split(l);
ll res=;
for (sit it=it1; it!=it2; it++) res=(res+((it->r)-(it->l)+)*ksm(it->v,x,y))%y;
return res;
} int rnd(){ int ret=(int)seed; seed=(seed*+)%; return ret; } int main(){
freopen("CF896C.in","r",stdin);
freopen("CF896C.out","w",stdout);
cin>>n>>m>>seed>>mx;
rep(i,,n) S.insert((P){i,i,rnd()%mx+});
S.insert((P){n+,n+,});
rep(i,,m){
int op=rnd()%+,l=rnd()%n+,r=rnd()%n+;
if (l>r) swap(l,r);
if (op==) x=rnd()%(r-l+)+; else x=rnd()%mx+;
if (op==) y=rnd()%mx+;
if (op==) add(l,r,x);
if (op==) assign(l,r,x);
if (op==) cout<<kth(l,r,x)<<endl;
if (op==) cout<<que(l,r,x,y)<<endl;
}
return ;
}
[CF896C]Willem, Chtholly and Seniorious(珂朵莉树)的更多相关文章
- [Codeforces896C] Willem, Chtholly and Seniorious (ODT-珂朵莉树)
无聊学了一下珂朵莉树 珂朵莉树好哇,是可以维护区间x次方和查询的高效数据结构. 思想大致就是一个暴力(相对而言)的树形数据结构 lxl毒瘤太强了,发明了ODT算法(Old Driver Tree老司机 ...
- CF896C Willem, Chtholly and Seniorious(珂朵莉树)
中文题面 珂朵莉树的板子……这篇文章很不错 据说还有奈芙莲树和瑟尼欧里斯树…… 等联赛考完去学一下(逃 //minamoto #include<bits/stdc++.h> #define ...
- 【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\ ...
随机推荐
- MySQL— 基础
目录 一.MySQL概述 二.下载安装 三.数据库操作 四.数据表操作 五.表内容操作 一.MySQL概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB 公司开发,目前属于 Oracl ...
- ES系列五、ES6.3常用api之搜索类api
1.搜索api 1.1.routing:路由 执行搜索时,它将广播到所有索引/索引分片(副本之间的循环).可以通过提供routing参数来控制将搜索哪些分片.例如,在索引book时,路由值可以是nam ...
- http响应头设置
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletExcep ...
- PYTHON-流程控制之if/while/for
内容: 流程控制: 1. if 2. while 3. for ==================================流程控制之if判断 1 什么是if判断 判断一个条件如果成立则做.. ...
- visual studio 2017 installer 安装包的安装必备组件设置
visual studio installer 2017 安装包的安装必备组件设置,默认设置只有net frmwork 4.6.1,如下图 这个时候如果打包安装,那么打出来的包一定需要先安装4.6. ...
- vue修饰符学习
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- 目标检测-ssd
intro: ECCV 2016 Oral arxiv: http://arxiv.org/abs/1512.02325 paper: http://www.cs.unc.edu/~wliu/pape ...
- this和super不能同时出现在构造方法中
package com.bjpowernode.t02inheritance.c09; /* * 使用super调用父类的构造方法 */public class TestSuper02 { publi ...
- php手动搭建wamp环境(一)--之 Windows系统下PHP环境搭建
1.PHP环境搭建的前提是 Apache HTTP Server (Apache 服务器)已经安装部署成功,并可以正常访问到服务器的主页面.Apache HTTP Server 的安装部署已经在上一篇 ...
- SSL证书的类型区别和配置教程
证书类型 参考: https://cloud.tencent.com/product/ssl 我们能申请到的免费证书就是DV SSL,个人站长不二之选.免费证书从哪申请,我就介绍几个,具体申请步骤百 ...