传送门

CDQ分治板子题

其实和陌上花开差不多

把时间、 l 、 r l、r l、r看成三个维度

像二维树状数组统计一样,把每一个询问拆成四块前缀和相减

然后统计答案的时候容斥一下

那么现在需要考虑的就只有 l , r l,r l,r

由于时间自然有序,就只需要考虑二维了

直接上 C D Q CDQ CDQ

注意树状数组空间开到 2 e 6 2e6 2e6

#include<bits/stdc++.h>
using namespace std;
inline int read(){char ch=getchar();int res=0,f=1;while(!isdigit(ch)){if(ch=='-')f=-f;ch=getchar();}while(isdigit(ch))res=(res<<3)+(res<<1)+(ch^48),ch=getchar();return res*f;
}
const int N=500005;
struct ask{int l,r,pos,op;
}q1[N],a[N];
int s,n,tot,cnt,ans[N],tr[2000000];
inline int lowbit(int x){return (x&(-x));}
inline void update(int pos,int k){for(;pos<=n;pos+=lowbit(pos))tr[pos]+=k;}
inline int query(int pos,int res=0){for(;pos;pos-=lowbit(pos))res+=tr[pos];return res;}
#define mid ((l+r)>>1)
inline bool comp(const ask&a,const ask&b){if(a.l==b.l)return a.r<b.r;return a.l<b.l;
}
inline void cdq(int l,int r){if(l==r)return;cdq(l,mid),cdq(mid+1,r);sort(a+l,a+mid+1,comp);sort(a+mid+1,a+r+1,comp);int i=l;for(int j=mid+1;j<=r;j++){for(;i<=mid&&a[i].l<=a[j].l;i++)if(a[i].op==1)update(a[i].r,a[i].pos);if(a[j].op==2)ans[a[j].pos]+=query(a[j].r);}for(int j=l;j<i;j++)if(a[j].op==1)update(a[j].r,-a[j].pos);
}
#undef mid
int main(){s=read(),n=read();int op=read();while(op!=3){if(op==1){a[++tot].l=read(),a[tot].r=read(),a[tot].pos=read(),a[tot].op=1;}else{int x1=read(),y1=read(),x2=read(),y2=read();a[++tot].l=x2  ,a[tot].r=y2  ,a[tot].pos=++cnt,a[tot].op=2;a[++tot].l=x1-1,a[tot].r=y2  ,a[tot].pos=++cnt,a[tot].op=2;a[++tot].l=x2  ,a[tot].r=y1-1,a[tot].pos=++cnt,a[tot].op=2;a[++tot].l=x1-1,a[tot].r=y1-1,a[tot].pos=++cnt,a[tot].op=2;}op=read();}cdq(1,tot);for(int i=1;i<=cnt;i+=4){cout<<(ans[i]-ans[i+1]-ans[i+2]+ans[i+3])<<'\n';}
}

【BOI2007】Mokia 摩基亚相关推荐

  1. 洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)

    题目链接:点击查看 题目大意:给出一个二维平面坐标系,需要执行数次操作,具体操作分为下列两种: 1 x y a:坐标 (x,y)(x,y)(x,y) 加上 aaa 个点 2 x1 y1 x2 y2:查 ...

  2. 洛谷 P4390 [BOI2007]Mokia 摩基亚 解题报告

    P4390 [BOI2007]Mokia 摩基亚 题目描述 摩尔瓦多的移动电话公司摩基亚(\(Mokia\))设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户 ...

  3. 洛谷P4390 [BOI2007]Mokia 摩基亚 题解

    洛谷P4390 [BOI2007]Mokia 摩基亚 题解 题目链接:P4390 [BOI2007]Mokia 摩基亚 题意:摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和 ...

  4. P4390 [BOI2007]Mokia 摩基亚 (CDQ解决三维偏序问题)

    题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫米.但其真正高科 ...

  5. luogu P4390 [BOI2007]Mokia 摩基亚

    传送门 昨天做完三维偏序并不能理解CDQ 今天做了这个题才行 (觉得没理解三维偏序是因为二维偏序没按正常方式理解) CDQ分治应用于数据结构 适用于离线的题 原理是后面的询问只能被前面的修改影响 可以 ...

  6. BOI2007 Mokia 摩基亚

    题目描述 题解: 容斥,将询问变成4个加权询问. 然后就是cdq了. 代码: #include<cstdio> #include<cstring> #include<al ...

  7. COJS 1752. [BOI2007]摩基亚Mokia

    1752. [BOI2007]摩基亚Mokia ★★★   输入文件:mokia.in   输出文件:mokia.out   简单对比 时间限制:5 s   内存限制:128 MB [题目描述] 摩尔 ...

  8. 【COGS1752】 BOI2007—摩基亚Mokia

    http://cogs.pro/cogs/problem/problem.php?pid=1752 (题目链接) 题意 给出$n*n$的棋盘,单点修改,矩阵查询. Solution 离线以后CDQ分治 ...

  9. Bzoj1176:MokiaCogs1752:[BOI2007]摩基亚Mokia

    题目 Cogs 没有Bzoj的权限号 Sol 离线,\(CDQ\)分治,把询问拆成\(4\)个,变成每次求二维前缀和 那么只要一个修改操作(关键字为时间,\(x\),\(y\))都在这个询问前,就可以 ...

最新文章

  1. 【每日一算法】二叉树的最小深度
  2. Android之如何获取手机程序列表以及程序相关信息并启动指定程序
  3. 《Elasticsearch in Action》书评与作者访谈
  4. mysql order by 中文 排序
  5. 在Spring Boot中使用内存数据库
  6. 陶哲轩实分析 命题 8.2.6 证明
  7. 设计模式笔记二十五:访问者模式
  8. linux通过网关挂在nfs,NFS 网络文件系统挂载在A8板子上
  9. UVA455 Periodic Strings
  10. docker没有下载完全_一个时代的结束:苹果正式关闭iTunes,但歌曲下载并没有完全消失...
  11. 从 0 开始学习 GitHub 电子书免费送
  12. libmodbus使用
  13. JQuery模拟MAC任务栏放大效果
  14. win10怎么更新到1809正式版 升级windows10方法
  15. 逆转录转座子简单介绍
  16. [Unity] 状态机事件流程框架 (二) 设计游戏状态的保存框架,存档功能 ScriptableObject、EasySave
  17. rt-n18u usb3.0 linux ex,【晒一下论坛晒单奖品】华硕RT-N18U多功能无线路由器2.4G 600Mbps...
  18. 如果我们总是等待绝对的一切就绪,那我们将永远无法开始
  19. android 首页广告位,Android 使用 ViewPager循环广告位的实现
  20. 半导体放电管TSS详解

热门文章

  1. G470 deepin wifi无法开启
  2. Java修炼之凡界篇 筑基期 第02卷 语法 第06话 运算符
  3. 全国计算机考试准考证模板
  4. 数据挖掘(六):预测
  5. CDH6.2.1CM6.2.1版本部署操作文档
  6. ads微带双枝短截线长度的解析计算
  7. 超实用超牛X!Linux系统内存知识总结!
  8. 分治法求解集合的众数及其重数
  9. 一周热点:IBM新技术使网速达400G/s,硬盘会“烧掉”吗
  10. 使用HBuilder打包Android和iOS,并上线