不强制在线的动态快速排序 题解 算法一 按照题意模拟 维护一个数组,每次直接往数组后面依次添加\([l, r]\) 每次查询时,暴力地\(sort\)查询即可 复杂度\(O(10^9 * q)\),期望得分\(0\)分 #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> using namespace std; int n, opt; int q[....…
emm 可重集合没用用.直接变成不可重复集合 有若干个区间 每个区间形如[L,R] [L,R]计算的话,就是若干个连续奇数的和.拆位统计1的个数 平衡树维护 加入一个[L,R],把相交的区间合并.之后相邻不相交的部分O(1)计算贡献到答案里. O(nlogn+30n) 不强制在线的动态快速排序 写起来并不太好写 set就可以 删除一些区间,合并成大区间 要分类讨论 至于calc(l,r) 有O(1)公式,可以不用按位: 第一个第二个发现了,后面就是多余位置处理即可. 代码: 1.注意插入区间被包…
P5105 不强制在线的动态快速排序 题目背景 曦月最近学会了快速排序,但是她很快地想到了,如果要动态地排序,那要怎么办呢? 题目描述 为了研究这个问题,曦月提出了一个十分简单的问题 曦月希望维护一个允许重复的集合\(S\),支持: 插入\([L, R]\),也就是插入\(L, L + 1 ... , R\),这\(R - L + 1\)个数 询问\(Sort(S)\) \(Sort(S)\)的定义为: 我们将集合\(S\)中的元素从小到大按照快速排序排好序,记为\(a_1, a_2 ... a…
P5105 不强制在线的动态快速排序 $\bigoplus \limits_{i=2}^n (a_i^2-a_{i-1}^2) = \bigoplus \limits_{i=2}^n (a_i-a_{i-1})×(a_i+a_{i-1})$ 关于$l~r$区间,由于$a_i=a_{i-1}+1$ $ \bigoplus \limits_{i=l}^{r-1} (2i+1)=\bigoplus \limits_{i=1}^{r-1} (2i+1)\bigoplus \limits_{i=1}^{l…
题目大意:有一个可重集$S$,有两个操作: $1\;l\;r:$表示把$S$变为$S\cup[l,r]$ $2:$表示将$S$从小到大排序,记为$a_1,a_2,\dots,a_n$,然后求出$\bigoplus\limits_{i=2}^n(a_i^2-a_{i-1}^2)$,$\bigoplus$表示异或 题解:假设$a_1,a_2,\dots,a_n=[l,l+n)$,发现$\bigoplus\limits_{i=2}^n(a_i^2-a_{i-1}^2)=(2l+1)\oplus(2l+…
首先集合去重不影响答案,然后打表易得连续自然数平方差异或前缀和的规律,于是问题就变为在线维护区间求并同时更新答案,set记录所有区间,每次暴力插入删除即可.由于每个区间至多只会插入删除一次,故均摊复杂度$O(n\log n)$ #include<set> #include<cstdio> #include<algorithm> #define rep(i,l,r) for (int i=(l); i<=(r); i++) typedef long long ll;…
前言 考试的时候居然想错了区间贡献,mdzz 思路 题目看着很方啊,难道要树套树? 但数据范围提醒我们,是nlogn的复杂度 Sort(S)的定义是不是很鬼畜 但我们不动脑子的打表容易发现 连续区间[1,n]内\(a_i^2-a_{i-1}^2\)为连续的奇数 (其实这里直接用初中的完全平方公式就好) 我们再次打表又发现了 连续的奇数的异或和,很有规律的嘛 可以直接O(1)求出 int xx(int x) { if(x%4==0) return 0; if(x%4==2) return 2; i…
[BZOJ3295]动态逆序对(线段树,树状数组) 题面 Description 对于序列A,它的逆序对数定义为满足iAj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素. Output 输出包含m行,依次为删除每个元素之前,逆序对的个数. S…
一个知识点不在一道题里说是没有灵魂的 线段树是用来处理区间信息的咯 但是往往因为需要4倍空间让许多人退却,而动态开点的线段树就非常棒 仿佛只用2倍就可以咯 指针保存位置,即节点信息,是很舒适的,所以用指针动态开点就更棒 <永无乡题面> 这个题哈,我刚开始学线段树合并时惯例懵, 而且我发现……网上的题解有简短甚至偷懒的,于是我很废了,去问神犇 下面就是,比较清楚的题解 首先我们会发现这个题像一个,图论? 但是并不是,因为他问的并不是图的问题(像最短路?),而是联通性,和排名下标,就不用建图 So…
思路: 偷懒 懒得离散化 搞了个动态开节点的线段树 (其实是一样的--..) 注意会有a=b的情况 要判掉 //By SiriusRen #include <cstdio> #include <cstring> #include <algorithm> using namespace std; int n,xx,yy,zz,root,cnt,inf=1000000000,tree[22222222],lson[22222222],rson[22222222]; long…