emm

可重集合没用用。直接变成不可重复集合

有若干个区间

每个区间形如[L,R]

[L,R]计算的话,就是若干个连续奇数的和。拆位统计1的个数

平衡树维护

加入一个[L,R],把相交的区间合并。之后相邻不相交的部分O(1)计算贡献到答案里。

O(nlogn+30n)

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

写起来并不太好写

set就可以

删除一些区间,合并成大区间

要分类讨论

至于calc(l,r)

有O(1)公式,可以不用按位:

第一个第二个发现了,后面就是多余位置处理即可。

代码:

1.注意插入区间被包含的情况,删掉前驱,R还要取一个max

2.按位的话,最高的是1e9+1e9=2e9,是1<<30,不是29.。。

#include<bits/stdc++.h>
#define reg register int
#define il inline
#define numb (ch^'0')
using namespace std;
typedef long long ll;
il void rd(int &x){
char ch;x=;bool fl=false;
while(!isdigit(ch=getchar()))(ch=='-')&&(fl=true);
for(x=numb;isdigit(ch=getchar());x=x*+numb);
(fl==true)&&(x=-x);
}
namespace Miracle{
int q;
struct po{
ll l,r;
po(){}
po(int x,int y){
l=x;r=y;
}
bool friend operator <(po a,po b){
if(a.l!=b.l) return a.l<b.l;
return a.r<b.r;
}
};
set<po>s;
set<po>::iterator it,le,ri;
ll ans;
ll pre(int x,ll p){
if(p==) return x%;
if(p==) {
if(x%==) return ;
if(x%==) return ;
if(x%==) return ;
if(x%==) return ;
}
x=x%(<<p);
if(x==) return (<<(p-))%;
return max(,x-(<<(p-)))%;
}
ll clac(int l,int r){
ll ret=;
l=(l+l+)/+;
r=(r+r-)/+;
if(l>r) return ;
for(ll i=;i>=;--i){
ret+=(pre(r,i)-pre(l-,i)+++)%*(<<i);
}
return ret;
}
void dele(int typ){ if(typ==){//pre and bac and me
ll tmp=clac((*it).l,(*it).r);
ans^=tmp;
ri=it;
++ri;
if(ri!=s.end()){
ans^=((*ri).l)*((*ri).l)-((*it).r)*((*it).r);
}
le=it;
if(le!=s.begin()){
--le;
ans^=((*it).l)*((*it).l)-((*le).r)*((*le).r);
}
s.erase(it);
}
else if(typ==){//bac and me
ll tmp=clac((*it).l,(*it).r);
ans^=tmp;
ri=it;
++ri;
if(ri!=s.end()){
ans^=((*ri).l)*((*ri).l)-((*it).r)*((*it).r);
}
s.erase(it);
}else {//only bac
ri=it;
++ri;
if(ri!=s.end()){
ans^=((*ri).l)*((*ri).l)-((*it).r)*((*it).r);
}
}
}
void ins(int l,int r){
if(s.empty()){
ans^=clac(l,r);
s.insert(po(l,r));
}else{
it=s.lower_bound(po(l,r));
ll L=l,R=r;
//bool fl=false;
if(it!=s.begin()){
--it;
if((*it).r>=l-){
L=min(L,(*it).l);
R=max(R,(*it).r);
dele();
//fl=true;
it=s.lower_bound(po(l,r));
}else{
dele();
}
}
while(){
it=s.lower_bound(po(l,r));
if(it==s.end()) break;
if((*it).l>r) break;
R=max(R,(*it).r);
dele();
} if(it!=s.end()){
ans^=((*it).l)*((*it).l)-R*R;
}
if(it!=s.begin()){
--it;
ans^=L*L-((*it).r)*((*it).r);
}
ans^=clac(L,R);
s.insert(po(L,R));
}
}
int main(){
rd(q);
int op,l,r;
while(q--){
rd(op);
if(op==){
rd(l);rd(r);
ins(l,r);
}else{
printf("%lld\n",ans);
}
}
return ;
} }
signed main(){
// freopen("data.in","r",stdin);
// freopen("my.out","w",stdout);
Miracle::main();
return ;
} /*
Author: *Miracle*
Date: 2019/1/16 9:17:43
*/

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

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

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

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

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

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

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

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

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

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

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

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

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

  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. JavaScript的数组和字符串应用

    函数search实现在一个已排序的数字类型数组中查找指定数字的功能. 可以采用数组的内置方法,二分查找法等进行操作 //方法一 var search = function(arr,dst){ var ...

  2. selenium +java 多个类公用driver问题

    问题点:太久没有写selenium代码,居然把driver公用的问题忘记了,即:每写一个测试类,执行过程中都会新建一个窗口,这样应该说是非常不专业的. 大概想了一个方法,虽然看起来也不怎么专业,但感觉 ...

  3. 机器学习与R语言——基本语法

    一.注释 1.选中要注释的内容,快捷键Ctrl+Shift+C(取消注释方法相同) 2.在需注释内容前输入# #需注释的内容 3.利用if语句,将判断条件设置为false则可跳过if语句中的内容,相当 ...

  4. Unity学习笔记(2): 如何使物体消失

    Unity使物体消失的三种方法 GameObject.Destroy(gameobjcet); //在下一帧破坏物体 gameObject.SetActive(false); //Unity2017新 ...

  5. 经典教程|10 分钟速成 Python3

    Python 是由吉多·范罗苏姆(Guido Van Rossum)在 90 年代早期设计. 它是如今最常用的编程语言之一.它的语法简洁且优美,几乎就是可执行的伪代码. 注意:这篇教程是基于 Pyth ...

  6. Android错误:can not get file data of lua/start_v2.op [LUA ERROR] [string "require "lua/start_v2””] 已解决

    错误: can not get file data of lua/start_v2.op [LUA ERROR] [string "require "lua/start_v2””] ...

  7. Javascript 初学笔记

    变量作用域 自 ES2015 起,JS 引入let 和 const 关键词定义变量的块作用域(Block Scope). var 仅支持全局作用域(Global Scope)和函数作用域(Functi ...

  8. Dubbo背景和简介

    转载出处 Dubbo开始于电商系统,因此在这里先从电商系统的演变讲起. 单一应用框架(ORM) 当网站流量很小时,只需一个应用,将所有功能如下单支付等都部署在一起,以减少部署节点和成本. 缺点:单一的 ...

  9. windows8和windows server2012不联网安装.net 3.5(包括2.0和3.0)

    安装完win8后 发现系统默认没有安装.net3.5 如果使用在线更新的话需要很久才能完成,特别是当前的网速以及微软的服务器.速度很忙,其实我们利用win8的安装盘就可以不需要联网更新,而且几分钟就搞 ...

  10. SpringMVC Controller介绍及常用注解——@Controller

    一 在SpringMVC 中,控制器Controller 负责处理由DispatcherServlet 分发的请求,它把用户请求的数据经过业务处理层处理之后封装成一个Model ,然后再把该Model ...