Prelude ODT这个东西真是太好用了,以后写暴力骗分可以用,写在这里mark一下. 题目链接:ヽ(✿゚▽゚)ノ Solution 先把原题解贴在这里:(ノ*・ω・)ノ 简单地说,因为数据是全部随机的,所以一定会有特别多的区间set,就会有很多数字相同,那么我们暴力把相同的数字合并成一个点,合并完之后数组就变得很短,然后对于询问暴力做就可以了. 具体复杂度是什么我也不会证明qwq,所以就把由乃的题解贴上来了qwq,感觉很靠谱的样子. 题解中给的是用STL的set维护缩点后的数组,我感觉不是很…
http://codeforces.com/problemset/problem/896/C 题意: 对于一个随机序列,执行以下操作: 区间赋值 区间加 区间求第k小 区间求k次幂的和 对于随机序列,可以使用Old Driver Tree 就是将序列中,连续的相同值域合并为一段 然后暴力操作 #include<set> #include<vector> #include<cstdio> #include<iostream> #include<algor…
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…
题意简述 维护一个数列,支持区间加,区间赋值,区间求第k小,区间求幂和 数据随机 题解思路 ODT是一种基于std::set的暴力数据结构. 每个节点对应一段区间,该区间内的数都相等. 核心操作split可以将节点拆开,修改需要的部分. 每个操作都split(r+1),split(l),再遍历其中所有区间,修改或求值. 至于时间复杂度,由assign保证 代码 #include <set> #include <vector> #include <utility> #in…
题意 给你一个长为 \(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\) . 一共会操作 \…
仿佛没用过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 …
题意 题目链接 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…
ODT(主要特征就是推平一段区间) 其实就是用set来维护三元组,因为数据随机所以可以证明复杂度不超过O(NlogN),其他的都是暴力维护 主要操作是split,把区间分成两个,用lowerbound, 有两点需要注意1.set里的东西不能改,所以变成了mutable(可改的const),2.s.insert返回pair类型,first是插入点的迭代器 = =sort里的比较函数ll没开wa了好久 精简版: //#pragma comment(linker, "/stack:200000000&…
传送门 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)…
貌似珂朵莉树是目前为止(我学过的)唯一一个可以维护区间x次方和查询的高效数据结构. 但是这玩意有个很大的毛病,就是它的高效建立在数据随机的前提下. 在数据随机的时候assign操作比较多,所以它的复杂度会趋近于mlogn(m为询问次数).假如出题人想要卡珂朵莉树的话,那肯定是会T得没边. 因此不要指望什么题目都套珂朵莉树(虽然它能水过很多数据结构题),特别是在数据非随机的情况下不要使用. 当然,如果题目让你求区间x次方和而在题目条件下你想不出巧算,那写一颗珂朵莉树还是很OK的. 不得不说珂朵莉树…