【BOI2007】Mokia 摩基亚
传送门
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 摩基亚相关推荐
- 洛谷 - P4390 [BOI2007]Mokia 摩基亚(带修二维数点-四叉线段树/CDQ分治)
题目链接:点击查看 题目大意:给出一个二维平面坐标系,需要执行数次操作,具体操作分为下列两种: 1 x y a:坐标 (x,y)(x,y)(x,y) 加上 aaa 个点 2 x1 y1 x2 y2:查 ...
- 洛谷 P4390 [BOI2007]Mokia 摩基亚 解题报告
P4390 [BOI2007]Mokia 摩基亚 题目描述 摩尔瓦多的移动电话公司摩基亚(\(Mokia\))设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户 ...
- 洛谷P4390 [BOI2007]Mokia 摩基亚 题解
洛谷P4390 [BOI2007]Mokia 摩基亚 题解 题目链接:P4390 [BOI2007]Mokia 摩基亚 题意:摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和 ...
- P4390 [BOI2007]Mokia 摩基亚 (CDQ解决三维偏序问题)
题目描述 摩尔瓦多的移动电话公司摩基亚(Mokia)设计出了一种新的用户定位系统.和其他的定位系统一样,它能够迅速回答任何形如"用户C的位置在哪?"的问题,精确到毫米.但其真正高科 ...
- luogu P4390 [BOI2007]Mokia 摩基亚
传送门 昨天做完三维偏序并不能理解CDQ 今天做了这个题才行 (觉得没理解三维偏序是因为二维偏序没按正常方式理解) CDQ分治应用于数据结构 适用于离线的题 原理是后面的询问只能被前面的修改影响 可以 ...
- BOI2007 Mokia 摩基亚
题目描述 题解: 容斥,将询问变成4个加权询问. 然后就是cdq了. 代码: #include<cstdio> #include<cstring> #include<al ...
- COJS 1752. [BOI2007]摩基亚Mokia
1752. [BOI2007]摩基亚Mokia ★★★ 输入文件:mokia.in 输出文件:mokia.out 简单对比 时间限制:5 s 内存限制:128 MB [题目描述] 摩尔 ...
- 【COGS1752】 BOI2007—摩基亚Mokia
http://cogs.pro/cogs/problem/problem.php?pid=1752 (题目链接) 题意 给出$n*n$的棋盘,单点修改,矩阵查询. Solution 离线以后CDQ分治 ...
- Bzoj1176:MokiaCogs1752:[BOI2007]摩基亚Mokia
题目 Cogs 没有Bzoj的权限号 Sol 离线,\(CDQ\)分治,把询问拆成\(4\)个,变成每次求二维前缀和 那么只要一个修改操作(关键字为时间,\(x\),\(y\))都在这个询问前,就可以 ...
最新文章
- 【每日一算法】二叉树的最小深度
- Android之如何获取手机程序列表以及程序相关信息并启动指定程序
- 《Elasticsearch in Action》书评与作者访谈
- mysql order by 中文 排序
- 在Spring Boot中使用内存数据库
- 陶哲轩实分析 命题 8.2.6 证明
- 设计模式笔记二十五:访问者模式
- linux通过网关挂在nfs,NFS 网络文件系统挂载在A8板子上
- UVA455 Periodic Strings
- docker没有下载完全_一个时代的结束:苹果正式关闭iTunes,但歌曲下载并没有完全消失...
- 从 0 开始学习 GitHub 电子书免费送
- libmodbus使用
- JQuery模拟MAC任务栏放大效果
- win10怎么更新到1809正式版 升级windows10方法
- 逆转录转座子简单介绍
- [Unity] 状态机事件流程框架 (二) 设计游戏状态的保存框架,存档功能 ScriptableObject、EasySave
- rt-n18u usb3.0 linux ex,【晒一下论坛晒单奖品】华硕RT-N18U多功能无线路由器2.4G 600Mbps...
- 如果我们总是等待绝对的一切就绪,那我们将永远无法开始
- android 首页广告位,Android 使用 ViewPager循环广告位的实现
- 半导体放电管TSS详解