看到全是线段树或者树状数组写法,就来提供一发全网唯一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+;
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=;
while(x)
{
ret+=c[x];
x-=lowbit(x);
}
return ret;
}
void cdq(int l,int r)
{
if(l==r)
return;
int mid=l+r>>;
cdq(l,mid),cdq(mid+,r);
sort(v+l,v+mid+,cmpy),sort(v+mid+,v+r+,cmpy);
int i=l,j=mid+;
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==)
ans[v[j].a]+=sum(n)-sum(v[j].c-);
//统计贡献到ans数组中
}
for(j=l;j<i;j++)
add(v[j].c,-v[j].w);
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=;i<=m;i++)
{
scanf("%d%d%d",&v[i].q,&v[i].b,&v[i].c);
v[i].w=;
if(v[i].q==)
swap(v[i].b,v[i].c),v[i].w=,vis[i]=;
//标记每个操作是否需要输出
v[i].a=i;
}
cdq(,m);
//枚举每个操作,需要输出就输出
for(int i=;i<=m;i++)
if(vis[i])
printf("%d\n",ans[i]);
return ;
}

P2184 【贪婪大陆】的更多相关文章

  1. P2184 贪婪大陆

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

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

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

  3. [luogu P2184] 贪婪大陆 [树状数组][线段树]

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

  4. luogu P2184 贪婪大陆

    乍一不咋会 ╭(╯3╰)╮ 把地雷L到R看成一条线段 要求的就是区间内有多少条线段经过 很明显是要用[1,R]内的起点个数-[1,L-1]的终点个数 然后这起点和终点个数可以用简单的差分线段树来维护一 ...

  5. 洛谷P2184 贪婪大陆

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

  6. P2184 贪婪大陆 树状数组

    树状数组帅炸了....又被一道水题轻虐,又被学长指出了一个错误....我太菜了QAQ 开两个树状数组,一个记录左端点,一个记录右端点: 共有cnt(总数) - (<l的右端点数目) - (> ...

  7. 洛谷 P2184 贪婪大陆

    题面 又是一类比较套路的题呢? 假如我们的地雷都表示成 [l[i],r[i]] ,要求[L,R],那么就相当于要求满足 (l[i]<=R && r[i]>=L)的i的个数. ...

  8. 洛谷P2184——贪婪大陆

    传送门:QAQQAQ 题意:给一个长度为$n$的区间,每次可以进行两种操作: 1.在$[l,r]$这个区间里放置一个和之前种类不同的炸弹 2.查询在$[l,r]$区间内有多少种不同种类的炸弹 思路:第 ...

  9. luoguP2184 贪婪大陆 题解(树状数组)

    P2184 贪婪大陆  题目 其实很容易理解就是询问一段区间内有多少段不同的区间 然后再仔细思索一下会发现: 1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中. 2.只要一个区 ...

  10. AC日记——贪婪大陆 洛谷 P2184

    贪婪大陆 思路: 树状数组: 跪烂.. 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int ...

随机推荐

  1. interface思考练习一

    参考了这篇文章,博主超级优秀,看他的最好,我只是写了点自己看他的博文学到的东西.CSDNzdwzzu2006 接口这东西认真学是在第一次构建工程的时候,很晕菜,原来学SE时不扎实,导致东西都不会用,看 ...

  2. mysql8 net start mysql 服务名无效

    解决办法: 1.win+R打开运行窗口,输入services.msc 2.在其中查看mysql的服务名,我的是MySQL80 3.以管理员身份打开cmd,输入net start MySQL80 出现下 ...

  3. Ansible8:Playbook循环

    目录 1.with_items 2.with_nested嵌套循环 3.with_dict 4.with_fileglob文件匹配遍历 5.with_lines 6.with_subelement遍历 ...

  4. python---基础知识回顾(十)进程和线程(进程)

    前戏:进程和线程的概念 若是学过linux下的进程,线程,信号...会有更加深刻的了解.所以推荐去学习下,包括网络编程都可以去了解,尤其是对select,poll,epoll都会有更多的认识. 进程就 ...

  5. Spring Resource 类图

    插播个广告 老丈人家的粉皮儿,农产品,没有乱七八糟的添加剂,欢迎惠顾 

  6. 2015/12/12 考了PAT,又回来玩Python了。

    上次写飞机大战的坑还没填完,然后就有好长时间没有更新博客了.可能大家在疑惑我在干什么... 其实不是有意暂停博客更新的,十一月学校里有两个考试要准备,然后有好多实验要做.平时的课余时间本来就不是很多了 ...

  7. 【转载】 深度学习与自然语言处理(1)_斯坦福cs224d Lecture 1

    版权声明:本文为博主原创文章,未经博主允许不得转载. 原文地址http://blog.csdn.net/longxinchen_ml/article/details/51567960  目录(?)[- ...

  8. MongoDB 及 Mysql 背后的 B/B+树

    索引是数据库常见的数据结构,每个后台开发人员都应该对索引背后的数据结构有所了解. 本文通过分析B-Tree及B-/+Tree数据结构及索引性能分析及磁盘存取原理尝试着回答一下问题: 为什么B-Tree ...

  9. OAuth2:Authorization Flows

    Ref:http://www.dannysite.com/blog/176/ OAuth2.0协议定义了用于获得授权的四种主要授权类型. 1. Client Credentials 一种基于APP的密 ...

  10. OI刷题录——hahalidaxin

    16-3-25  —— bzoj 2049 [Sdoi2008]Cave 洞穴勘测:LCT入门 bzoj 2002 [Hnoi2010]Bounce 弹飞绵羊:LCT Tsinsen A1303. t ...