题目大意:有一个可重集$S$,有两个操作:

  1. $1\;l\;r:$表示把$S$变为$S\cup[l,r]$
  2. $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+3)\oplus\dots\oplus(2l+2n-1)$,然后这玩意儿肯定可以打表找规律什么的$O(1)$求。

题目转化为如何维护这东西,发现这个集合重复不重复没有关系(写一下式子就知道了),可以动态开点线段树,把整个区间都被覆盖的节点打个标记,处理一下两个区间交接的地方就好了

卡点:

C++ Code:

#include <algorithm>
#include <cstdio>
#include <cctype>
namespace __IO {
namespace R {
int x, ch;
inline int read() {
while (isspace(ch = getchar())) ;
for (x = ch & 15; isdigit(ch = getchar()); ) x = x * 10 + (ch & 15);
return x;
}
}
}
using __IO::R::read; #define maxn 300010
inline int calc(const int x) {
switch (x & 3) {
case 0: return 1;
case 1: return x - 1 << 1;
case 2: return 3;
case 3: return x << 1;
}
return 20040826;
}
inline long long sqr(const int x) { return static_cast<long long> (x) * x; } namespace SgT {
#define N (maxn * 19)
const int maxl = 1, maxr = 1e9;
long long V[N];
bool tg[N];
int lc[N], rc[N], Lp[N], Rp[N];
int root, idx; int L, R;
void __modify(int &rt, const int l, const int r) {
if (!rt) rt = ++idx;
if (tg[rt]) return ;
if (L <= l && R >= r) {
Lp[rt] = l, Rp[rt] = r, tg[rt] = true;
V[rt] = calc(r) ^ calc(l);
return ;
}
const int mid = l + r >> 1;
if (L <= mid) __modify(lc[rt], l, mid);
if (R > mid) __modify(rc[rt], mid + 1, r); const int lc = SgT::lc[rt], rc = SgT::rc[rt];
Lp[rt] = Lp[lc] ? Lp[lc] : Lp[rc];
Rp[rt] = Rp[rc] ? Rp[rc] : Rp[lc];
if (Rp[lc] && Lp[rc]) V[rt] = V[lc] ^ V[rc] ^ (sqr(Lp[rc]) - sqr(Rp[lc]));
else V[rt] = V[lc] | V[rc];
if (tg[lc] && tg[rc]) tg[rt] = true;
}
void modify(const int __L, const int __R) {
L = __L, R = __R;
__modify(root, maxl, maxr);
}
#undef N
} int main() {
for (int n = read(); n; --n) {
int op = read();
if (op == 1) {
static int l, r;
l = read(), r = read();
SgT::modify(l, r);
} else printf("%lld\n", SgT::V[SgT::root]);
}
return 0;
}

  

[洛谷P5105]不强制在线的动态快速排序的更多相关文章

  1. 洛谷 P5105 不强制在线的动态快速排序

    P5105 不强制在线的动态快速排序 题目背景 曦月最近学会了快速排序,但是她很快地想到了,如果要动态地排序,那要怎么办呢? 题目描述 为了研究这个问题,曦月提出了一个十分简单的问题 曦月希望维护一个 ...

  2. P5105 不强制在线的动态快速排序

    P5105 不强制在线的动态快速排序 $\bigoplus \limits_{i=2}^n (a_i^2-a_{i-1}^2) = \bigoplus \limits_{i=2}^n (a_i-a_{ ...

  3. luogu P5105 不强制在线的动态快速排序

    前言 考试的时候居然想错了区间贡献,mdzz 思路 题目看着很方啊,难道要树套树? 但数据范围提醒我们,是nlogn的复杂度 Sort(S)的定义是不是很鬼畜 但我们不动脑子的打表容易发现 连续区间[ ...

  4. luoguP5105 不强制在线的动态快速排序 [官方?]题解 线段树 / set

    不强制在线的动态快速排序 题解 算法一 按照题意模拟 维护一个数组,每次直接往数组后面依次添加\([l, r]\) 每次查询时,暴力地\(sort\)查询即可 复杂度\(O(10^9 * q)\),期 ...

  5. luoguP5105 不强制在线的动态快速排序

    emm 可重集合没用用.直接变成不可重复集合 有若干个区间 每个区间形如[L,R] [L,R]计算的话,就是若干个连续奇数的和.拆位统计1的个数 平衡树维护 加入一个[L,R],把相交的区间合并.之后 ...

  6. [Luogu5105]不强制在线的动态快速排序

    首先集合去重不影响答案,然后打表易得连续自然数平方差异或前缀和的规律,于是问题就变为在线维护区间求并同时更新答案,set记录所有区间,每次暴力插入删除即可.由于每个区间至多只会插入删除一次,故均摊复杂 ...

  7. LCT总结——概念篇+洛谷P3690[模板]Link Cut Tree(动态树)(LCT,Splay)

    为了优化体验(其实是强迫症),蒟蒻把总结拆成了两篇,方便不同学习阶段的Dalao们切换. LCT总结--应用篇戳这里 概念.性质简述 首先介绍一下链剖分的概念(感谢laofu的讲课) 链剖分,是指一类 ...

  8. 洛谷P3676 小清新数据结构题 [动态点分治]

    传送门 思路 这思路好妙啊! 首先很多人都会想到推式子之后树链剖分+线段树,但这样不够优美,不喜欢. 脑洞大开想到这样一个式子: \[ \sum_{x} sum_x(All-sum_x) \] 其中\ ...

  9. 【洛谷】P4643 【模板】动态dp

    题解 在冬令营上听到冬眠的东西,现在都是板子了猫锟真的是好毒瘤啊(雾) (立个flag,我去thusc之前要把WC2018T1乱搞过去= =) 好的,我们可以参考猫锟的动态动态dp的课件,然后你发现你 ...

随机推荐

  1. myeclipse 配置堆内存

    2.非堆内存分配 JVM使用-XX:PermSize设置非堆内存初始值,默认是物理内存的1/64:由XX:MaxPermSize设置最大非堆内存的大小,默认是物理内存的1/4. 打开myeclipse ...

  2. Net Core学习笔记

    Net Core 官网:https://dotnet.github.io/ Net Core Api: https://docs.microsoft.com/en-us/dotnet/api/?vie ...

  3. Python字符串格式化符号及转义字符含义(非常全!!!)

    字符串格式化符号含义 符号 说明 %c 格式化字符及其 ASCII 码 %s 格式化字符串 %d 格式化整数 %o 格式化无符号八进制数 %x 格式化无符号十六进制数 %X 格式化无符号十六进制数(大 ...

  4. 前端开发工程师 - 01.页面制作 - 第1章.Photoshop切图

    第1章--Photoshop切图 工具.面板.视图 什么是切图? 1. 从设计稿(.psd)中切出网络素材,如按钮.图标.logo.背景图等 2. 编写代码,在代码中使用图片,生成静态页面 --给网页 ...

  5. vue watch监控对象

    1.普通的watch data() { return { frontPoints: 0 } }, watch: { frontPoints(newValue, oldValue) { console. ...

  6. 397. Longest Continuous Increasing Subsequence

    Description Give an integer array,find the longest increasing continuous subsequence in this array. ...

  7. 网页性能管理详解:浅谈chrome-Timeline及window.requestAnimationFrame()方法

    你遇到过性能很差的网页吗? 这种网页响应非常缓慢,占用大量的CPU和内存,浏览起来常常有卡顿,页面的动画效果也不流畅. 你会有什么反应?我猜想,大多数用户会关闭这个页面,改为访问其他网站.作为一个开发 ...

  8. 深入理解 Vuejs 动画效果

    本文主要归纳在 Vuejs 学习过程中对于 Vuejs 动画效果的各个相关要点.由于本人水平有限,如文中出现错误请多多包涵并指正,感谢.如果需要看更清晰的代码高亮,请跳转至我的个人站点的 深入理解 V ...

  9. 应用Response.Write实现带有进度条的多文件上传

    前几天,写过一篇随笔“使用RESPONSE.WRITE实现在页面的生命周期中前后台的交互”.说是交互,实际上也主要是在ASP.NET的页面周期中 从后台利用RESPONSE.WRITE向前台即时的推送 ...

  10. 使用 letter-space 后文字不能居中解决

    letter-space:2em; text-align: center; 使用letter-space后和上面的字体对比明显没有居中: 选定元素后发现,每个字后面都被加了2em,不是不能居中而是因为 ...