仿佛没用过std::set Seniorious has n pieces of talisman. Willem puts them in a line, the i-th of which is an integer ai. In order to maintain it, Willem needs to perform m operations. There are four types of operations: 1 l r x: For each i such that l ≤ i …
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,…
Prelude ODT这个东西真是太好用了,以后写暴力骗分可以用,写在这里mark一下. 题目链接:ヽ(✿゚▽゚)ノ Solution 先把原题解贴在这里:(ノ*・ω・)ノ 简单地说,因为数据是全部随机的,所以一定会有特别多的区间set,就会有很多数字相同,那么我们暴力把相同的数字合并成一个点,合并完之后数组就变得很短,然后对于询问暴力做就可以了. 具体复杂度是什么我也不会证明qwq,所以就把由乃的题解贴上来了qwq,感觉很靠谱的样子. 题解中给的是用STL的set维护缩点后的数组,我感觉不是很…
题目大意:有$n$个数,有$m$次$4$种操作: l r x :将$[l,r]$区间所有数加上$x$ l r x :将$[l,r]$区间所有数变成$x$ l r k :输出$[l,r]$区间第$k$大 l r x p :输出$\sum\limits_{i=l}^rs_i^x\pm $n,m\leqslant10^5$ 题解:珂朵莉树模板题 卡点:$split$中写错,写成 it==s.end() C++ Code: #include <cstdio> #include <algorith…
题意 题目链接 Sol ODT板子题.就是用set维护连续段的大暴力.. 然鹅我抄的板子本题RE提交AC??.. 具体来说,用50 50 658073485 946088556这个数据测试下面的代码,然后在79行停住,看一下bg和i的值会发生神奇的事情.. 问题已解决,确实是那位博主写错了, 只要把split(l)和split(r + 1)反过来就行了 #include<bits/stdc++.h> #define LL long long #define int long long #def…
中文题面 珂朵莉树的板子……这篇文章很不错 据说还有奈芙莲树和瑟尼欧里斯树…… 等联赛考完去学一下(逃 //minamoto #include<bits/stdc++.h> #define IT set<node>::iterator #define ll long long using namespace std; ,mod9=1e9+,N=1e5+; ll ksm(ll a,ll b,ll mod){ ll res=;a%=mod; while(b){ ) res=res*a%…
Willem, Chtholly and Seniorious https://codeforces.com/contest/897/problem/E time limit per test 2 seconds memory limit per test 256 megabytes input standard input output standard output — Willem... — What's the matter? — It seems that there's someth…
http://codeforces.com/problemset/problem/896/C 题意: 对于一个随机序列,执行以下操作: 区间赋值 区间加 区间求第k小 区间求k次幂的和 对于随机序列,可以使用Old Driver Tree 就是将序列中,连续的相同值域合并为一段 然后暴力操作 #include<set> #include<vector> #include<cstdio> #include<iostream> #include<algor…
貌似珂朵莉树是目前为止(我学过的)唯一一个可以维护区间x次方和查询的高效数据结构. 但是这玩意有个很大的毛病,就是它的高效建立在数据随机的前提下. 在数据随机的时候assign操作比较多,所以它的复杂度会趋近于mlogn(m为询问次数).假如出题人想要卡珂朵莉树的话,那肯定是会T得没边. 因此不要指望什么题目都套珂朵莉树(虽然它能水过很多数据结构题),特别是在数据非随机的情况下不要使用. 当然,如果题目让你求区间x次方和而在题目条件下你想不出巧算,那写一颗珂朵莉树还是很OK的. 不得不说珂朵莉树…
ODT模板题,ODT适合随机数据下具有维护区间推平操作的序列维护题目,时间复杂度较为玄学.. 代码如下 #include <bits/stdc++.h> #define pb push_back #define mp make_pair #define all(x) x.begin(),x.end() using namespace std; const int maxn=1e5+10; const int mod=1e9+7; typedef long long LL; LL fpow(LL…
题意 给你一个长为 \(n\) 的序列 \(a_i\) 需要支持四个操作. \(1~l~r~x:\) 把 \(i \in [l, r]\) 的 \(a_i\) 加 \(x\) . \(2~l~r~x:\) 把 \(i \in [l, r]\) 的 \(a_i\) 赋值成 \(x\) . \(3~l~r~x:\) 求 \([l, r]\) 区间的第 \(x\) 小元素. \(4~l~r~x~y:\) 求 \((\sum_{i = l}^{r} {a_i}^x) \mod y\) . 一共会操作 \…
无聊学了一下珂朵莉树 珂朵莉树好哇,是可以维护区间x次方和查询的高效数据结构. 思想大致就是一个暴力(相对而言)的树形数据结构 lxl毒瘤太强了,发明了ODT算法(Old Driver Tree老司机算法) 这里有一个大佬ACDreamer的题解 附上链接https://www.luogu.org/blog/ACdreamer/solution-cf896c 还有一个B站的讲解视频 附上链接https://www.bilibili.com/video/av21651173 我不会用珂朵莉树,但是…
题意简述 维护一个数列,支持区间加,区间赋值,区间求第k小,区间求幂和 数据随机 题解思路 ODT是一种基于std::set的暴力数据结构. 每个节点对应一段区间,该区间内的数都相等. 核心操作split可以将节点拆开,修改需要的部分. 每个操作都split(r+1),split(l),再遍历其中所有区间,修改或求值. 至于时间复杂度,由assign保证 代码 #include <set> #include <vector> #include <utility> #in…
传送门 ODTODTODT出处(万恶之源) 题目简述: 区间赋值 区间加 区间所有数k次方和 区间第k小 思路:直接上ODTODTODT. 不会的点这里 代码: #include<bits/stdc++.h> #define ri register int using namespace std; inline int read(){ int ans=0; char ch=getchar(); while(!isdigit(ch))ch=getchar(); while(isdigit(ch)…
ODT(主要特征就是推平一段区间) 其实就是用set来维护三元组,因为数据随机所以可以证明复杂度不超过O(NlogN),其他的都是暴力维护 主要操作是split,把区间分成两个,用lowerbound, 有两点需要注意1.set里的东西不能改,所以变成了mutable(可改的const),2.s.insert返回pair类型,first是插入点的迭代器 = =sort里的比较函数ll没开wa了好久 精简版: //#pragma comment(linker, "/stack:200000000&…
这里介绍以个小$trick$,民间流传为$Old Driver Tree$,实质上就是$set$维护线段. 我们将所有连续一段权值相同的序列合并成一条线段,扔到$set$里去,于是$set$里的所有线段的并就是原序列,并且都不相交. 我们在操作的时候很暴力,每次把$[l, r]$的线段抠出来,暴力枚举一遍算答案.对于每一个非区间赋值的操作,最多断两条线段,新加两条线段. 实现起来很方便,思路也非常简单,但是局限性也很明显,因为其复杂度是基于随机的,并且必须存在区间赋值的操作. 但$set$维护线…
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と言おうと 世界一.幸せな女の子だ 题目描述 ——“假如……我是说假如喔. 万一我再过五天就会死,你能不能对我温柔一点?” 巨大的六号兽五天后将袭击浮游大陆. 无数次计算得到的残酷数据表明,只有圣剑瑟尼欧尼斯的适格精灵——珂朵莉·诺塔·瑟尼欧尼斯(Chtholly Nota Seniorious)开启…
题目背景 大样例下发链接: https://pan.baidu.com/s/1nuVpRS1 密码: sfxg こんなにも.たくさんの幸せをあの人に分けてもらった だから.きっと 今の.私は 谁が何と言おうと 世界一.幸せな女の子だ 题目描述 ——“假如……我是说假如喔. 万一我再过五天就会死,你能不能对我温柔一点?” 巨大的六号兽五天后将袭击浮游大陆. 无数次计算得到的残酷数据表明,只有圣剑瑟尼欧尼斯的适格精灵——珂朵莉·诺塔·瑟尼欧尼斯(Chtholly Nota Seniorious)开启…
威廉需要调整圣剑的状态,因此他将瑟尼欧尼斯拆分护符,组成了一个nnn行mmm列的矩阵. 每一个护符都有自己的魔力值.现在为了测试圣剑,你需要将这些护符分成 A,B两部分. 要求如下: 圣剑的所有护符,恰好都属于两部分中的一部分. 每个部分内部的方块之间,可以通过上下左右相互到达,而且每个内部的方块之间互相到达,最多允许拐一次弯. 例如 AAAAA AAAAA AAAAA AABAA BaAAA AAABB ABBBA BBAAA AAABB AABAA BaAAA ABBBB AAAAA AAA…
[题意]将n*m矩阵分成两个区域,要求满足一定条件,求两区域内部极差较大值最小.n,m<=2000 [算法]二分 [题解]极差的数值满足单调性,所以考虑二分极差. 对于给定的极差,将所有数值排序后,1~a[n*m]-num-1必须选择A,a[1]+num+1~n*m必须选择B,其它不要求.(开始的时候想二分图染色,后来发现排序一下规律就十分明显了) 现在问题转化为矩阵中已知一些格子选A,一些格子选B,求能否组成合法方案. 观察要求满足的条件,很容易得出结论:分界线必须单调,所以就有上A下B或上B…
题目链接 题意 给你一个N*M的矩阵 (N,M <=2000)  把他分成两部分 使两部分的极差较大的一个最小  求这个最小值.然后分矩阵的要求是:每个部分内部的方块之间,可以通过上下左右相互到达,而且每个内部的方块之间互相到达,最多允许拐一次弯(不能出现“凹”233) 二分答案+贪心 二分上界是矩阵max-min 判断的时候 由于 分开的矩阵在每一行肯定是连续的 所以就按顺序扫一遍 判断一下在哪里分开即可 还有就是由于最大值最小值所在的位置不确定 ,我们需要旋转3次这个矩阵然后求最优答案 代码…
ODT,OldDriverTree,又名ChthollyTree" role="presentation" style="position: relative;">ODT,OldDriverTree,又名ChthollyTreeODT,OldDriverTree,又名ChthollyTree −关键操作推平一段区间" role="presentation" style="position: relative;&…
参考资料: Chtholly Tree (珂朵莉树) (应某毒瘤要求,删除链接,需要者自行去Bilibili搜索) 毒瘤数据结构之珂朵莉树 在全是珂学家的珂谷,你却不知道珂朵莉树?来跟诗乃一起学习珂朵莉树丫~ (挑战用最短的篇幅讲清楚一个毒瘤数据结构) 1.珂朵莉是什么? 珂朵莉·诺塔·瑟尼欧里斯是轻小说及改编动画<末日时在做什么?有没有空?可以来拯救吗?>中的女主角,五位成体妖精兵之一.最强圣剑“瑟尼欧里斯”的适合者.在第28号浮游岛上意外跌落而与威廉相遇,并受到他的帮助. 但是知道了珂朵莉…
珂朵莉树 珂朵莉树其实不是树,只是一个借助平衡树实现的数据结构,主要是对于有区间赋值的数据结构题,可以用很暴力的代码很高效地完成任务,当然这是建立在数据随机的基础上的. 即使数据不是随机的,写一个珂朵莉树用来当做暴力也是很划算的. 珂朵莉树可以使用std::map来实现,并且代码量极小,不知道为什么大家都要写set. 维护方式 那么问题来了,如何使用\(map\)来实现珂朵莉树呢?众所周知,用\(set\)的实现方式都是维护一个连续的相同区间,\(map\)当然也是同理,我们仍然用\(map\)…
珂朵莉树,也叫ODT(Old Driver Tree 老司机树) 从前有一天,珂朵莉出现了... 然后有一天,珂朵莉树出现了... 看看图片的地址 Codeforces可还行) 没错,珂朵莉树来自Codeforces 896C C. Willem, Chtholly and Seniorious 国外珂学家 滑稽) 前置芝士: set的基本操作 迭代器(跟指针差不多 重载运算符.构造函数的简单了解 mutable(下面也会讲 暴力枚举 常数优化(inline O2 O3 register大法好啊…
前言 比赛链接: Div.1 : http://47.110.12.131:9016/contest/7 Div.2 : http://47.110.12.131:9016/contest/8 Div.2--四月是你的谎言 下面是 Div.2 的题解. A. 若能绽放光芒 首先讲一个 \(\Theta(n^3)\) 的暴力: 枚举区间 \([l,r]\),这里已经有 \(\Theta(n^2)\) 的时间复杂度了. 然后我们考虑怎么找到这段区间对应的最长公共"子序列". 这个贪心一下,…
快考试了,把我以前写过的题回顾一下.Noip2007 树网的核:floyd,推出性质,暴力.Noip2008 笨小猴:模拟Noip2008 火柴棒等式:枚举Noip2008 传纸条:棋盘dpNoip2008 双栈排序:将复杂条件转化为简单约束,二分图染色判断可行性,模拟.Noi2010 能量采集:常见套路,求:ΣΣgcd(i,j),设t = gcd(i,j),能算出gcd=t的点对有(n/t) * (m/t)个,然后利用容斥原理减去2t,3t,……,kt的,倒序枚举.Noip2009 潜伏者:模…
Content 我们将长度为偶数的回文数称作 zcy 数,比如 \(11,1221\) 是 zcy 数,而 \(34,121\) 不是.假设第 \(i\) 个 zcy 数为 \(a_i\),求 \(\sum\limits_{i=1}^na_i\)(前 \(n\) 个 zcy 数的和)模 \(p\) 后的结果. 数据范围:\(1\leqslant n\leqslant 10^5,1\leqslant p\leqslant 10^9\). Solution 在写题解之前做一个提醒:这篇题解里的代码用…
题目链接:D. Ithea Plays With Chtholly 题意: 给你n张纸,在纸上写字(在 1 - c之间)可以写m次数 (,).(主要是交互,让你判断) 题解: 首先,看到m>=n*c/2,我们假设从1位置放入数据,如果放入的数据大于前面已经放入的数据那就往后排小于就替换.这样放的话,每个位置替换最大的次数是C,所以最大的次数总数是n*c.发现正好差了一倍.所以我们可以从两边放入,(小于c/2从1放入,大于c/2从N位置放入)这样每个位置替换的最大次数就是c/2,就正好可以过了.(…
[CF896E]Welcome home, Chtholly 题意:一个长度为n的序列ai,让你支持两种操作: 1.l r x:将[l,r]中ai>x的ai都减去x.2.l r x:询问[l,r]中有多少ai=x. n,m<=100000,ai,x<=100000. 题解:先分块,对于每一块,我们用双向链表维护块内所有不同的ai的值(排好序的):对于每个ai的值,我们再用一个链表维护这个值在块内所有的出现位置. 对于操作1,将所有ai>x的数都减去x 等价于 先将所有ai<=…