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
*/

最新文章

  1. Silverlight用户自定义控件件中增加属性和方法
  2. grootJs 系统常用API接受
  3. JavaScript 全选函数的实现
  4. 【C++基础】 各种“虚”总结(ing...)
  5. unity3d Human skin real time rendering plus 真实模拟人皮实时渲染 plus篇
  6. BZOJ1629: [Usaco2007 Demo]Cow Acrobats
  7. Android APP开发需求文档范本
  8. 使用AOP的方式监测方法执行耗时
  9. app微信支付-java服务端接口 支付-查询-退款
  10. ddctf2019--web部分writeup
  11. ContentProvider使用总结
  12. solt插槽的使用。
  13. RENAME方法进行分区改造
  14. 使用ant对JS/CSS 进行压缩以提高网站性能
  15. 协议无关组播--稀疏模式 PIM-SM
  16. Practice telephone techniques
  17. Windows获取远程Linux局域网内的mysql连接
  18. python第十一课——转换结构
  19. 【模板】exBSGS/Spoj3105 Mod
  20. JavaSe 之三目运算符应用

热门文章

  1. php实现快速排序和冒泡排序
  2. 面试时让你说一个印象最深的bug,该怎么回答
  3. Python+MySQL开发医院网上预约系统(课程设计)一
  4. tomcat配置https | 自签发证书配置
  5. Java EE平台介绍(译)
  6. loadrunner处理https请求
  7. 0428数字口袋精灵app优化
  8. 20172326『Java程序设计』课程结对编程练习_四则运算第二周阶段总结
  9. OGNL动态实现result
  10. 第一个scrum会议