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

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

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

  2. CF896C Willem, Chtholly and Seniorious(珂朵莉树)

    中文题面 珂朵莉树的板子……这篇文章很不错 据说还有奈芙莲树和瑟尼欧里斯树…… 等联赛考完去学一下(逃 //minamoto #include<bits/stdc++.h> #define ...

  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. UML和模式应用4:初始阶段(5)--用例编写的准则

    1.前言 本文主要介绍用例编写时所遵循的几条基本准则. 2.用例编写的准则 2.1 以本质的风格编写用例 如系统认证,而不要说 需要输入ID进行认证等 2.2 编写简洁的用例 如系统认证,不要说 这个 ...

  2. Graphql 相关 strapi -- Koa2

    Graphql  相关资源:     https://github.com/chentsulin/awesome-graphql graphql-apis       :     https://gi ...

  3. kafka系列一、kafka安装及部署、集群搭建

    一.环境准备 操作系统:Cent OS 7 Kafka版本:kafka_2.10 Kafka官网下载:请点击 JDK版本:1.8.0_171 zookeeper-3.4.10 二.kafka安装配置 ...

  4. Json对象和字符串互相转换 数据拼接 JSON使用方式

    JSON(JavaScript Object Notation) 是一种轻量级的数据交换格式. 一.JSON字符串转换为JSON对象: eval() 和 JSON.parse eg- json字符串: ...

  5. WebRTC服务器——Licode 环境搭建

    WebRTC服务器--Licode 环境搭建 系统配置 阿里云服务器 Ubuntu 14.04.5 LTS Docker 环境搭建 在一台空的机器上搭建docker环境,先要安装docker,执行下面 ...

  6. spring boot 中的热部署

    <plugin>    <groupId>org.springframework.boot</groupId>    <artifactId>sprin ...

  7. css3图片旋转

    <!DOCTYPE html> <html lang="en"> <head> <meta http-equiv="Conten ...

  8. zabbix server+agent+proxy搭建性能监控平台

    这是新找到了配置文件配置方法但未尝试 每个模块工作职责: Zabbix Server:负责接收agent发送的报告信息的核心组件,所有配置,统计数据及操作数据均由其组织进行: Database Sto ...

  9. LINQ学习之旅 (四)

    LINQ to SQL语句之Group By/Having和Exists/In/Any/All/Contains 1.Group By/Having操作符 适用场景:分组数据,为我们查找数据缩小范围. ...

  10. System.getenv()和System.getProperty() 的区别

    1.System.getenv() 方法是获取指定的环境变量的值.它有两种方法,一种是接收参数为任意字符串,当存在指定环境变量时即返回环境变量的值,否则返回null.另外一种是不接受参数,那么返回的是 ...