看到全是线段树或者树状数组写法,就来提供一发全网唯一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 【贪婪大陆】相关推荐

  1. 洛谷 P2184 贪婪大陆 解题报告

    P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...

  2. 【洛谷】P2184 贪婪大陆

    题目地址: https://www.luogu.com.cn/problem/P2184 题目背景: 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败--人类被蚂蚁们逼到了Greed ...

  3. P2184 贪婪大陆

    题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败--人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前方是变异了的超级蚂蚁. 小 ...

  4. lugou P2184 贪婪大陆(线段树)

    题目描述 小 FF 最后一道防线是一条长度为 nn 的战壕,小 FF 拥有无数多种地雷,而 SCV 每次可以在 [L, R]区间埋放同一种不同于之前已经埋放的地雷.由于情况已经十万火急,小 FF 在某 ...

  5. 中国最大动漫论坛 贪婪大陆 被【无耻小人】侵占!!!全体斑竹,会员遭封id毒手

    相关统计 以下数据为网站访问量统计网站Alexa.com调查 以动漫为背景的动漫爱好者的社区. 中文动漫类网站排名:第1位 世界排名:687位(下降158) 单IP日访问量:60万以上 页面访问量:1 ...

  6. 贪婪大陆(cogs 1008)

    [题目描述]  面对蚂蚁们的疯狂进攻,小FF的Tower defense宣告失败--人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海,前方是变异了的超级蚂蚁. ...

  7. 中国大陆网站TOP100

    1. 新浪新闻中心 包括即日的国内外不同类型的新闻与评论,人物专题,图库. {BR www.sina.com.cn 2. Baidu.com 全球最大中文搜索引擎,向人们提供简单.可依赖的信息获取方式 ...

  8. 中国BBS社区前10名

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! 注:最新 ...

  9. 怎么快速搜索linux的日志,如何快速查看Linux日志?

    因为在生产环境会遇到很多问题,那么最快的定位方式莫过于去看日志,我们都知道服务器每天会产生大量的日志,那么如何快速的定位也就是最关键的. 本文介绍六种查看日志的命令:tail.head.cat.mor ...

最新文章

  1. 牛客第七场 Sudoku Subrectangles
  2. python祝福祖国代码_国际文交所:9月17日-10月15日《祝福祖国信卡》《澳门爱与祝愿套票》《北京精神封》3个提货转仓公告...
  3. 数据结构--单向链表
  4. java ing印版,Java中有趣的事【汇总】持续更新ing
  5. 基于D3.js实现分类多标签的Tree型结构可视化
  6. 多核CPU缓存一致性协议MESI
  7. 【Arthas】Arthas Command处理流程
  8. kafka zookeeper java_简单搭建kafka + zookeeper,附简单Java生产和消费客户端
  9. java锁的对象引用
  10. 细数那些不能直视的IE6BUG
  11. LINUX安装中文字体SimHei
  12. c语言bim的题目,BIM考试|BIM技术概论考试技术习题练习10
  13. 本特利330505-02-02-02-00速度传感器
  14. 微信公众号群发模板消息占用每月4次群发次数吗
  15. CSDN 中 MarkDown编辑器自动生成目录
  16. 3G网络通信技术与4G网络通信技术的区别
  17. 加入Web前端学习还有市场吗?自己是否适合学习前端
  18. 2022-04-26 linux文件系统解读
  19. 向日葵客户端密码忘记的处理方法
  20. 人人php 路由,关于人人分销/人人商城的二次开发路由解析

热门文章

  1. js大屏导出图片_超大图片全屏动态展示js插件
  2. 区块链成熟度评测报告
  3. Mips TLB miss异常
  4. 理解Android进程创建流程
  5. Android Studio系列(二)使用Android Studio开发/调试整个android系统源代码(不定时更新)
  6. python turtle 颜色数字_python的绘图利器--海龟绘图turtle
  7. SPI/I2S调试心得与经验总结
  8. adb shell 修改文件名_从零开始学Linux运维|27.Shell编程(函数与参数的传递)
  9. vectorvn1610报价_【8.5873.5444.G323】价格_厂家 - 中国供应商
  10. redhat yum 安装 mysql_RedHat/CentOS 为yum安装remi源 | 学步园