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-1} (2i+1)$

区间内奇数异或和,按位分解,其实只与$2^i$的个数有关

打表,可以发现$O(1)$的规律

设$n=4m+k$

当$k=\{0,1,2,3\}$前缀和分别为$\{2n,3,2n+2,1\}$

线段树维护区间异或和,修改$O(log_1e9)$查询$O(1)$

My complete code:

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<iostream>
using namespace std;
typedef long long LL;
inline LL Read(){
LL x=0,f=1; char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
const LL maxn=10000000;
const LL inf=1e10;
struct node{
LL mx,mi,son[2],sum,lazy;
}tree[maxn];
LL nod,m,root;
inline void Update(LL now){
LL l=tree[now].son[0],r=tree[now].son[1];
tree[now].mi=tree[l].mi?tree[l].mi:tree[r].mi;
tree[now].mx=tree[r].mx?tree[r].mx:tree[l].mx;
tree[now].sum=tree[l].sum^tree[r].sum;
if(l&&r)
tree[now].sum^=(tree[l].mx+tree[r].mi)*(tree[r].mi-tree[l].mx);
if(tree[l].lazy&&tree[r].lazy)
tree[now].lazy=1;
}
inline LL Get(LL x){
LL now=x%4;
if(!now)
return x<<1;
if(now==1)
return 3;
if(now==2)
return (x<<1)+2;
return 1;
}
void Add(LL &now,LL l,LL r,LL lt,LL rt){
if(lt>r||rt<l||tree[now].lazy)
return;
if(!now)
now=++nod;
if(lt<=l&&rt>=r){
tree[now].mi=l,
tree[now].mx=r,
tree[now].sum=Get(l-1)^Get(r-1);
tree[now].lazy=1;
return;
}
LL mid=(l+r)>>1;
Add(tree[now].son[0],l,mid,lt,rt);
Add(tree[now].son[1],mid+1,r,lt,rt);
Update(now);
}
int main(){
m=Read();
while(m--){
LL op=Read(),l,r;
if(op==1)
l=Read(),r=Read(),
Add(root,1,1e9,l,r);
else
printf("%lld\n",tree[root].sum);
}
return 0;
}

  

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

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

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

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

    题目大意:有一个可重集$S$,有两个操作: $1\;l\;r:$表示把$S$变为$S\cup[l,r]$ $2:$表示将$S$从小到大排序,记为$a_1,a_2,\dots,a_n$,然后求出$\bi ...

  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. [EOJ439] 强制在线

    Description 见EOJ439 Solution 先考虑不强制在线怎么做. 按询问区间右端点排序,从左往右扫,维护所有后缀的答案. 如果扫到 \(a[i]\),那么让统计个数的 \(cnt[a ...

  8. hihocoder #1236 Scores (15北京赛区网络赛J) (五维偏序,强制在线,bitset+分块)

    链接:http://hihocoder.com/problemset/problem/1236 思路; 有n个五维的向量,给出q个询问,每个询问是一个五维向量,问有多少个向量没有一维比这个向量大.并且 ...

  9. [BZOJ 3720][JZYZOJ 2016]gty的妹子树 强制在线 树分块/树套树

    jzyzoj的p2016 先码着,强制在线的树分块或者树套树?关键是我树分块还在入门阶段树套树完全不会啊摔   http://blog.csdn.net/jiangyuze831/article/de ...

随机推荐

  1. 在OpenCV中实现matlab中的im2double功能

    最近在把matlab的代码转化到VS2010上. matlab中采用im2double将读入的图像转换为double型,在OpenCV中就需要对图像进行深度的转换. 读入一幅灰度图像,深度为1(8U) ...

  2. Intellij IDEA 拷贝的项目变为红色名字

    Intellij IDEA 拷贝的项目变为红色名字 学习了:https://blog.csdn.net/lishaoran369/article/details/72991805 settings & ...

  3. SqlServer 书目

    1. http://www.cnblogs.com/CareySon/archive/2013/05/04/PlanCacheInSQLServerPart2.html(运行计划缓存) 2. http ...

  4. 上传中文文件到linux文件出现乱码问题的解决方案

    convm -f gbk -t utf8 -r --notest /ftp的目录 效果:

  5. 报错: Access restriction: The type JPEGImageEncoder is not accessible due to restriction on required library

    报错: Access restriction:The type JPEGCodec is not accessible due to restriction on required library C ...

  6. 协程(Coroutine)并不是真正的多线程(转)

    自:http://www.zhihu.com/question/23895384 说到Coroutine,我们必须提到两个更远的东西.在操作系统(os)级别,有进程(process)和线程(threa ...

  7. C语言 结构体篇

    结构体:是一种构造类型 它是由若干成员组成的 其中每一个成员都可以是一个基本数据类型或者又是一个构造类型 定义结构体变量后,系统就会为其自动分配内存 为了便于更大的程序便于修改和使用  常常将结构体类 ...

  8. jQuery--基础(查询标签)

    浅谈jQuery使用背景 jQuery是使用原生js写成的一个库,使用简单,提高开发效率.在用js冗杂的代码解决的问题中,大部分都可以用jQuery来快速解决. 例如: js中查询网页中ID为&quo ...

  9. grunt前端打包——css篇

    [导读] 前端打包的工具有很多,我用的习惯的就是这个grunt,无论是你要在github上做开源,还是让自己的项目变得更易于维护,grunt都是首选. 前端打包的工具有很多,我用的习惯的就是这个gru ...

  10. Maven上传本地jar

    1. 将Jar包安装到本地仓库 -- DgroupId和DartifactId构成了该jar包在pom.xml的坐标, 对应依赖的DgroupId和DartifactId    -- Dfile表示需 ...