题解:

前一题不是强制在线,后一题是强制在线

树套树空间会炸

说一下cdq分治+树状数组

首先我们利用cdq分治使得查询和操作保证先后关系

然后矩阵查询变成4个矩阵的差

那么我们就可以运用扫描线的方法来维护了

时间nlogn^2,空间O(n)

后一题是kd-tree

查询的方法和线段树基本一样

如果矩阵被包含就返回答案,如果不被包含就直接退出

否则递归下去

然后修改的话和替罪羊树一样

达到一定时候就重构

注意一下x相同insert和build要保证y的顺序区分左右

另外学习了一下map中用struct作为key的方法 虽然这题完全不用用

代码:

#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (rint i=h;i<=t;i++)
#define dep(i,t,h) for (rint i=t;i>=h;i--)
#define mid ((h+t)/2)
#define me(x) memset(x,0,sizeof(x))
const int INF=2e9;
const int N=6e6+1e4;
char ss[1<<24],*A=ss,*B=ss;
IL char gc()
{return A==B&&(B=(A=ss)+fread(ss,1,1<<24,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{rint f=1,c; while (c=gc(),c<48||c>57) if (c=='-') f=-1; x=(c^48);while (c=gc(),c>47&&c<58) x=(x<<3)+(x<<1)+(c^48); x*=f;
}
IL void umax(int &x,int y)
{if (x<y) x=y;
}
IL void umin(int &x,int y)
{if (x>y) x=y;
}
struct re{int d[2],v;
}p[N];
int cmp_d,ans,rt,num;
bool cmp(re x,re y)
{return x.d[cmp_d]<y.d[cmp_d]||(x.d[cmp_d]==y.d[cmp_d]&&x.d[cmp_d^1]<y.d[cmp_d^1]);
}
struct kd
{int Mx[N],My[N],Nx[N],Ny[N],count2[N],ls[N],rs[N];IL void clear(){me(count2);me(ls); me(rs);}IL void updata(int x){count2[x]=count2[ls[x]]+count2[rs[x]]+p[x].v;if (ls[x]){umax(Mx[x],Mx[ls[x]]);umax(My[x],My[ls[x]]);umin(Nx[x],Nx[ls[x]]);umin(Ny[x],Ny[ls[x]]);}if (rs[x]){umax(Mx[x],Mx[rs[x]]);umax(My[x],My[rs[x]]);umin(Nx[x],Nx[rs[x]]);umin(Ny[x],Ny[rs[x]]);}}int build(int h,int t,int o){cmp_d=o; nth_element(p+h,p+mid,p+t+1,cmp);int x=mid;Mx[x]=Nx[x]=p[x].d[0];My[x]=Ny[x]=p[x].d[1];count2[x]=p[x].v;if (h!=x) ls[x]=build(h,mid-1,o^1); else ls[x]=0;if (x!=t) rs[x]=build(mid+1,t,o^1); else rs[x]=0;updata(x);return x; }void insert(int &k,int x,int y,int z,int o){if (!k){k=++num;Mx[num]=Nx[num]=p[num].d[0];My[num]=Ny[num]=p[num].d[1];count2[num]=p[num].v=z;return;}if (p[k].d[0]==x&&p[k].d[1]==y){count2[k]+=z; p[k].v+=z; return;}if (!o)if (x<p[k].d[0]||(x==p[k].d[0]&&y<p[k].d[1])) insert(ls[k],x,y,z,o^1);else insert(rs[k],x,y,z,o^1);else if (y<p[k].d[1]||(y==p[k].d[1]&&x<p[k].d[0])) insert(ls[k],x,y,z,o^1);else insert(rs[k],x,y,z,o^1); updata(k);}void query(int k,int x1,int x2,int y1,int y2){if (!k||Mx[k]<x1||Nx[k]>x2||My[k]<y1||Ny[k]>y2) return;if (x2>=Mx[k]&&Nx[k]>=x1&&y2>=My[k]&&Ny[k]>=y1){ans+=count2[k]; return;}if (x1<=p[k].d[0]&&p[k].d[0]<=x2&&y1<=p[k].d[1]&&p[k].d[1]<=y2)ans+=p[k].v;query(ls[k],x1,x2,y1,y2); query(rs[k],x1,x2,y1,y2);}
}kd;
struct re1{int a,b;
};
struct cmp2
{bool operator() (const re1 x,const re1 y){if (x.a<y.a||(x.a==y.a&&x.b<y.b)) return(1); else return(0);}
};
map<re1,int,cmp2> M;
int main()
{int m;freopen("1.in","r",stdin);freopen("1.out","w",stdout);read(m);int cnt=0,rt=0,i=0;while (1){i++;ans=0;int k;read(k);if (k==3) break;if (k==1){int x,y,z;read(x); read(y); read(z);x^=ans; y^=ans; z^=ans;re1 k3=(re1){x,y};int kk=M[k3];if (!kk) p[num+1].d[0]=x,p[num+1].d[1]=y,kk=num+1;M[k3]=kk;kd.insert(rt,x,y,z,0);cnt++;if (cnt%10000==0){ kd.clear();rt=kd.build(1,num,0);} } else{int x1,x2,y1,y2;read(x1),read(y1),read(x2),read(y2);x1^=ans,x2^=ans,y1^=ans,y2^=ans;ans=0;kd.query(rt,x1,x2,y1,y2);cout<<ans<<endl;}}return 0;
}

转载于:https://www.cnblogs.com/yinwuxiao/p/9288414.html

bzoj2683bzoj4066相关推荐

最新文章

  1. Android10.0 日志系统分析(二)-logd、logcat架构分析及日志系统初始化-[Android取经之路]
  2. [LeetCode] 93. Restore IP Addresses_Medium tag: backtracking
  3. 一种集各种优点于一身的技术面试方式--转
  4. 使用条件注释完成浏览器兼容
  5. 驰骋工作流引擎表单设计控件-字段类控件(2)
  6. Vue项目中v-for无法渲染数据
  7. g++默认参数_C ++默认参数| 查找输出程序| 套装2
  8. CLion 中使用 clang-format
  9. IPCamera可以通过BackChannel进行对讲?
  10. 树莓派上使用 LCD1602 显示状态
  11. c语言书199页第12题,单片机C语言入门实例和最常见问题分析(含程序部分了)(199页)-原创力文档...
  12. 华为交换机:基于IP子网划分VLAN
  13. 电脑正下方显示桌面和计算机,电脑桌面下方的显示栏怎么设置
  14. 【新书推荐】【2019.06】大局观从何而来
  15. EdgeBox_EHub_tx1_tx2_E100 系统网络调试链接说明
  16. java叠加两张png带透明图片
  17. Python生成声音波形、模拟钢琴音色
  18. 仓库设计之ER图箭头讲解
  19. 一键分析Android的BugReport
  20. 没别的,就聊聊数据通信网络

热门文章

  1. 【STC15库函数上手笔记】9、硬件SPI
  2. VC跨进程数据(结构体)传递-WM_COPYDATA
  3. linux 中查找文件,并且将目标文件按时间顺序排序
  4. uni-app微信小程序动态样式设置;微信小程序style行内式无效;微信小程序style行内式编译报错;微信小程序:style设置样式
  5. 前端学习(3312):redux的正确构建
  6. 前端学习(3217):prop的基本使用
  7. 前端学习(3136):react-hello-react之不用柯里化的写法
  8. [css] 说下你对background-size的理解,它有什么运用场景?
  9. 工作277:v-model实战
  10. 前端学习(1862)vue之电商管理系统电商系统之绘制默认头像