博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[洛谷P5105]不强制在线的动态快速排序
阅读量:6688 次
发布时间:2019-06-25

本文共 2068 字,大约阅读时间需要 6 分钟。

题目大意:有一个可重集$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 
#include
#include
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 300010inline 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
(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;}

  

转载于:https://www.cnblogs.com/Memory-of-winter/p/10252342.html

你可能感兴趣的文章
主页被劫持问题
查看>>
linux中awk学习小结
查看>>
虚拟机安装centos7后只有lo网卡的解决方法
查看>>
用samba和Microsoft Sync Toy从linux备份日志文件到windows
查看>>
spring的quartz定时任务
查看>>
chattr,lsattr命令使用详解
查看>>
python 基础
查看>>
MySQL主从的一致性校验及修复
查看>>
Skype For Business 2015实战系列5:安装后端数据库
查看>>
Microsoft Security Essentials 中文版正式发布
查看>>
JSF Note
查看>>
自定义支持多行显示的RadioGroup
查看>>
tty终端截屏软件FbGrab安装和使用
查看>>
Linux内核网络参数
查看>>
初尝Mcafee之终结篇:管理架构概述【09】
查看>>
成功恢复UNIX误删除数据库文件(NODE已被清除)
查看>>
自定义控件之圆形颜色渐变进度条--SweepGradient
查看>>
Canvas裁剪和Region、RegionIterator
查看>>
双色汉诺塔【分离型】
查看>>
【驱动】linux设备驱动·入门
查看>>