P2184 【贪婪大陆】
看到全是线段树或者树状数组写法,就来提供一发全网唯一cdq分治三维偏序解法吧
容易发现,这个题的查询就是对于每个区间l,r,查询有多少个修改区间li,ri与l,r有交集
转化为数学语言,就是查询满足li<=r且ri>=l的修改个数
一个二维偏序问题,但是我们发现,这是个动态插入的二维偏序问题
_(:з」∠)_一时不知所措
再想一想,不妨把时间另开一个维度作为第三维,然后就是这样了
对于每个查询,我们要求出它之前有多少个修改区间与其相交
数学语言:
查询满足li<=r且ri>=l且[li,ri].time<[l,r].time的修改个数
思路清晰明了,而且敲好想,但是实现细节还是比较麻烦的(一部分是因为我的奇葩cdq写法),在代码注释里解释一下(模板这种的就不解释了)
#include<iostream> #include<cstdio> #include<algorithm> #include<vector> using namespace std; const int maxn=1e5+10; struct node{int a,b,c,q,w; //a,b,c表示三个维度,q记录这个操作是修改还是查询 //w表示这个是否有效(和q差不多,查询是不需要统计的,w=0;修改的w=1) }v[maxn]; int n,m,cnt,tot,c[maxn],ans[maxn]; bool vis[maxn]; bool cmpx(const node &a,const node &b) {return a.a==b.a?(a.b==b.b?a.c<b.c:a.b<b.b):a.a<b.a; } bool cmpy(const node &a,const node &b) {return a.b==b.b?a.c<b.c:a.b<b.b; } int lowbit(int x) {return x&-x; } void add(int x,int ch) {while(x<=n){c[x]+=ch;x+=lowbit(x);} } int sum(int x) {int ret=0;while(x){ret+=c[x];x-=lowbit(x);}return ret; } void cdq(int l,int r) {if(l==r)return;int mid=l+r>>1;cdq(l,mid),cdq(mid+1,r);sort(v+l,v+mid+1,cmpy),sort(v+mid+1,v+r+1,cmpy);int i=l,j=mid+1;for(;j<=r;j++){while(v[i].b<=v[j].b&&i<=mid)add(v[i].c,v[i].w),i++;if(v[j].q==2)ans[v[j].a]+=sum(n)-sum(v[j].c-1);//统计贡献到ans数组中 }for(j=l;j<i;j++)add(v[j].c,-v[j].w); } int main() {scanf("%d%d",&n,&m);for(int i=1;i<=m;i++){scanf("%d%d%d",&v[i].q,&v[i].b,&v[i].c);v[i].w=1;if(v[i].q==2)swap(v[i].b,v[i].c),v[i].w=0,vis[i]=1;//标记每个操作是否需要输出v[i].a=i;}cdq(1,m);//枚举每个操作,需要输出就输出for(int i=1;i<=m;i++)if(vis[i])printf("%d\n",ans[i]);return 0; }
转载于:https://www.cnblogs.com/ivanovcraft/p/9692861.html
P2184 【贪婪大陆】相关推荐
- 洛谷 P2184 贪婪大陆 解题报告
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...
- 【洛谷】P2184 贪婪大陆
题目地址: https://www.luogu.com.cn/problem/P2184 题目背景: 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败--人类被蚂蚁们逼到了Greed ...
- P2184 贪婪大陆
题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败--人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁. 小 ...
- lugou P2184 贪婪大陆(线段树)
题目描述 小 FF 最后一道防线是一条长度为 nn 的战壕,小 FF 拥有无数多种地雷,而 SCV 每次可以在 [L, R]区间埋放同一种不同于之前已经埋放的地雷.由于情况已经十万火急,小 FF 在某 ...
- 中国最大动漫论坛 贪婪大陆 被【无耻小人】侵占!!!全体斑竹,会员遭封id毒手
相关统计 以下数据为网站访问量统计网站Alexa.com调查 以动漫为背景的动漫爱好者的社区. 中文动漫类网站排名:第1位 世界排名:687位(下降158) 单IP日访问量:60万以上 页面访问量:1 ...
- 贪婪大陆(cogs 1008)
[题目描述] 面对蚂蚁们的疯狂进攻,小FF的Tower defense宣告失败--人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海,前方是变异了的超级蚂蚁. ...
- 中国大陆网站TOP100
1. 新浪新闻中心 包括即日的国内外不同类型的新闻与评论,人物专题,图库. {BR www.sina.com.cn 2. Baidu.com 全球最大中文搜索引擎,向人们提供简单.可依赖的信息获取方式 ...
- 中国BBS社区前10名
分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 注:最新 ...
- 怎么快速搜索linux的日志,如何快速查看Linux日志?
因为在生产环境会遇到很多问题,那么最快的定位方式莫过于去看日志,我们都知道服务器每天会产生大量的日志,那么如何快速的定位也就是最关键的. 本文介绍六种查看日志的命令:tail.head.cat.mor ...
最新文章
- 牛客第七场 Sudoku Subrectangles
- python祝福祖国代码_国际文交所:9月17日-10月15日《祝福祖国信卡》《澳门爱与祝愿套票》《北京精神封》3个提货转仓公告...
- 数据结构--单向链表
- java ing印版,Java中有趣的事【汇总】持续更新ing
- 基于D3.js实现分类多标签的Tree型结构可视化
- 多核CPU缓存一致性协议MESI
- 【Arthas】Arthas Command处理流程
- kafka zookeeper java_简单搭建kafka + zookeeper,附简单Java生产和消费客户端
- java锁的对象引用
- 细数那些不能直视的IE6BUG
- LINUX安装中文字体SimHei
- c语言bim的题目,BIM考试|BIM技术概论考试技术习题练习10
- 本特利330505-02-02-02-00速度传感器
- 微信公众号群发模板消息占用每月4次群发次数吗
- CSDN 中 MarkDown编辑器自动生成目录
- 3G网络通信技术与4G网络通信技术的区别
- 加入Web前端学习还有市场吗?自己是否适合学习前端
- 2022-04-26 linux文件系统解读
- 向日葵客户端密码忘记的处理方法
- 人人php 路由,关于人人分销/人人商城的二次开发路由解析
热门文章
- js大屏导出图片_超大图片全屏动态展示js插件
- 区块链成熟度评测报告
- Mips TLB miss异常
- 理解Android进程创建流程
- Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)
- python turtle 颜色数字_python的绘图利器--海龟绘图turtle
- SPI/I2S调试心得与经验总结
- adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
- vectorvn1610报价_【8.5873.5444.G323】价格_厂家 - 中国供应商
- redhat yum 安装 mysql_RedHat/CentOS 为yum安装remi源 | 学步园