传送门:QAQQAQ

题意:给一个长度为$n$的区间,每次可以进行两种操作:

1.在$[l,r]$这个区间里放置一个和之前种类不同的炸弹

2.查询在$[l,r]$区间内有多少种不同种类的炸弹

思路:第一反应是线段树:但一直没想出来线段树来维护什么

和?和可能会因为炸弹覆盖区间长度为改变,而不是因为炸弹种类而改变。

最大值?可能两个完全不相交的区间却有两种不同的炸弹

所以我们要换一个思路想:我们可以把题目转化成这样:给你一个区间,求之前那些区间和该区间相交的有几个

再想:两个区间相交有什么特点呢?两个区间相离又有什么特点呢?——两个区间相离要么是$l1>r2$,要么是$r1<l2$

我们就很容易找到思路了:我们建立两个线段树分别维护区间内$l,r$分别出现的次数

然后对于每一个询问的$l,r$,在$[1,l-1]$区间内查询$r$有几个(cnt1),在$[r+1,n]$查询$l$有几个(cnt2),然后用之前的总区间个数减去($cnt1+cnt2$)即可。

(思路很像CF1190D,维护位置存在点的个数,一般这种题都要用离散化(莫名又想到CDQ分治……))

代码:(线段树当然可以,但树状数组似乎更方便)

#include<bits/stdc++.h>
using namespace std;
const int N=; int sum[][N*],n,m;//0:l 1:r
void build(int x,int l,int r)
{
if(l==r)
{
sum[][x]=;
sum[][x]=;
return;
}
int mid=(l+r)>>;
build(x+x,l,mid);
build(x+x+,mid+,r);
} void update(int x,int l,int r,int pos,int bl)
{
if(l==r)
{
sum[bl][x]++;
return;
}
int mid=(l+r)>>;
if(mid>=pos) update(x+x,l,mid,pos,bl);
else update(x+x+,mid+,r,pos,bl);
sum[bl][x]=sum[bl][x+x]+sum[bl][x+x+];
} int query(int x,int l,int r,int L,int R,int bl)
{
int ret=;
if(L>R) return ;
if(L<=l&&r<=R) return sum[bl][x];
int mid=(l+r)>>;
if(mid>=L) ret+=query(x+x,l,mid,L,R,bl);
if(mid<R) ret+=query(x+x+,mid+,r,L,R,bl);
return ret;
} int main()
{
int sum=;
scanf("%d%d",&n,&m);
while(m--)
{
int x,y,opt;
scanf("%d%d%d",&opt,&x,&y);
if(opt==)
{
update(,,n,x,);
update(,,n,y,);
sum++;
}
else
{
int now=;
now+=query(,,n,y+,n,);
now+=query(,,n,,x-,);
printf("%d\n",sum-now);
}
}
return ;
}

洛谷P2184——贪婪大陆的更多相关文章

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

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

  2. 洛谷P2184 贪婪大陆

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

  3. 洛谷 P2184 贪婪大陆

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

  4. P2184 贪婪大陆

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

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

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

  6. 【洛谷P2184】贪婪大陆

    贪婪大陆 题目链接 对于一个区间[l,r],右端点在l左边即[1,l-1]中的区间与区间[l,r]没有交集, 左端点在r右边即[r,n]中的区间与区间[l,r]没有交集, 其余区间必与[l,r]有交集 ...

  7. 洛谷 P2446 [SDOI2010]大陆争霸 解题报告

    P2446 [SDOI2010]大陆争霸 题目背景 在一个遥远的世界里有两个国家:位于大陆西端的杰森国和位于大陆东端的克里斯国.两个国家的人民分别信仰两个对立的神:杰森国信仰象征黑暗和毁灭的神曾·布拉 ...

  8. 线段树 洛谷P3932 浮游大陆的68号岛

    P3932 浮游大陆的68号岛 题目描述 妖精仓库里生活着黄金妖精们,她们过着快乐,却随时准备着迎接死亡的生活. 换用更高尚的说法,是随时准备着为这个无药可救的世界献身. 然而孩子们的生活却总是无忧无 ...

  9. 洛谷——P1690 贪婪的Copy

    P1690 贪婪的Copy 题目描述 Copy从卢牛那里听说在一片叫yz的神的领域埋藏着不少宝藏,于是Copy来到了这个被划分为个区域的神地.卢牛告诉了Copy这里共有个宝藏,分别放在第Pi个(1&l ...

随机推荐

  1. position:fixed 造成页面抖动解决办法

    今天做项目遇到一个问题.鼠标滚动到指定长度后,理想状况是菜单吸附到顶部.但是实际上在一些页面上会造成抖动.定位之后发现.window.pageYoffset值会变成0 搜索一些资料后发现.因为fixe ...

  2. 工具类--MD5Utils

    public class MD5Utils { private static final String[] HEX_DIGITS = { "0", "1", & ...

  3. XML XPATH simpleXML

    XPath 通过DOM结构定位节点,在数据量很大的情况下速度下降的很厉害.解决方法是XPath.Xpath的作用:用于快速定位节点 position()是节点的位置,节点的位置是从1开始 simple ...

  4. Application.GetOpenFilename 使用说明

    Application.GetOpenFilename(FileFilter, FilterIndex, Title, ButtonText, MultiSelect) 语法: 名称         ...

  5. Java 序列化和反序列化(三)Serializable 源码分析 - 2

    目录 Java 序列化和反序列化(三)Serializable 源码分析 - 2 1. ObjectStreamField 1.1 数据结构 1.2 构造函数 2. ObjectStreamClass ...

  6. B. Light bulbs(2019 ICPC上海站)

    There are NN light bulbs indexed from 00 to N-1N−1. Initially, all of them are off. A FLIP operation ...

  7. springfox-swagger原理解析与使用过程中遇到的坑

    swagger简介 swagger确实是个好东西,可以跟据业务代码自动生成相关的api接口文档,尤其用于restful风格中的项目,开发人员几乎可以不用专门去维护rest api,这个框架可以自动为你 ...

  8. vue中:key 和react 中key={} 的作用,以及ref的特性?

    vue中:key 和react 中key={} 为了给 vue 或者react 一个提示,以便它能跟踪每个节点的身份,从而重用和重新排序现有元素,你需要为每项提供一个唯一 key 属性 一句话概括就是 ...

  9. spring Aop设计原理

    转载至:https://blog.csdn.net/luanlouis/article/details/51095702 0.前言 Spring 提供了AOP(Aspect Oriented Prog ...

  10. IPC$渗透使用

    简介 IPC$(Internet Process Connection)是共享"命名管道"的资源,它是为了让进程间通信而开放的命名管道,通过提供可信任的用户名和口令,连接双方可以建 ...