传送门: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=100050;int sum[2][N*4],n,m;//0:l 1:r
void build(int x,int l,int r)
{if(l==r) {sum[1][x]=0;sum[0][x]=0;return;}int mid=(l+r)>>1;build(x+x,l,mid);build(x+x+1,mid+1,r);
}void update(int x,int l,int r,int pos,int bl)
{if(l==r) {sum[bl][x]++;return;}int mid=(l+r)>>1;if(mid>=pos) update(x+x,l,mid,pos,bl);else update(x+x+1,mid+1,r,pos,bl);sum[bl][x]=sum[bl][x+x]+sum[bl][x+x+1];
}int query(int x,int l,int r,int L,int R,int bl)
{int ret=0;if(L>R) return 0;if(L<=l&&r<=R) return sum[bl][x];int mid=(l+r)>>1; if(mid>=L) ret+=query(x+x,l,mid,L,R,bl);if(mid<R) ret+=query(x+x+1,mid+1,r,L,R,bl);return ret;
}int main()
{int sum=0;scanf("%d%d",&n,&m);while(m--){int x,y,opt;scanf("%d%d%d",&opt,&x,&y);if(opt==1){update(1,1,n,x,0);update(1,1,n,y,1);sum++;}else{int now=0;now+=query(1,1,n,y+1,n,0);now+=query(1,1,n,1,x-1,1);printf("%d\n",sum-now);}}return 0;
}

View Code

转载于:https://www.cnblogs.com/Forever-666/p/11306355.html

洛谷P2184——贪婪大陆相关推荐

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

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

  2. 【洛谷】P2184 贪婪大陆

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

  3. 洛谷 P1690 贪婪的Copy

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

  4. P2184 贪婪大陆

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

  5. 洛谷P1690 贪婪的Copy 题解

    题目:https://www.luogu.org/problemnew/show/P1690 分析: 这道题就是一道最短路的题目,因为看到数据范围: n≤100n\leq100n≤100 所以考虑使用 ...

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

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

  7. 2019.6.7 一场搜索专题的考试【including 洛谷·血色先锋队,入门OJ·兴建高铁,珠光宝气阁

    这次分数还好.但全是搜索题还没上200就有点打击人了--[本狸才177QAQ 血色先锋队/血色敢死队 传送门:洛谷P1332 & 入门OJ P2259 Description 邪魔天国领主复活 ...

  8. 关于图的广度优先搜索—————洛谷1332

    这边讲一下一般的解题思路,一般来说,我们做题都是将复杂化为简单.所以一般切题,我们都是看是否能够构造一个邻接矩阵. 对于邻接矩阵,但凡有一点算法基础都能知道它其中的一个作用就是用来描述数据之间的相互关 ...

  9. 洛谷P1710 地铁涨价

    P1710 地铁涨价 51通过 339提交 题目提供者洛谷OnlineJudge 标签O2优化云端评测2 难度提高+/省选- 提交  讨论  题解 最新讨论 求教:为什么只有40分 数组大小一定要开够 ...

  10. 洛谷 P1332 血色先锋队

    洛谷 P1332 血色先锋队 第一次写bfs,纪念一下 qwq 之前一直都在写dfs,对bfs有莫名的恐惧 现在觉得...好像差不多 qwq 题目描述 巫妖王的天灾军团终于卷土重来,血色十字军组织了一 ...

最新文章

  1. 【实战】使用Python部署机器学习模型的10个实践经验
  2. 华为p50预计售价鸿蒙是什么,华为P50pro预计售价多少 华为P50Pro参数配置
  3. FFmpeg代码导读——基础篇
  4. PHP 底层的运行机制与原理
  5. 信息学奥赛一本通(1090:含k个3的数)
  6. APUE读书笔记-04文件和目录(5)
  7. Deadline调度器之(二):细节和使用方法
  8. ERP、CRM、SCM、电子商务、BI、ITSS
  9. 矩阵分解-Cholesky分解
  10. Linux(2)- Linux基础命令
  11. 计算机退出域后无法加域,win10退出域后无法再加入域
  12. 【windows】在控制面板卸载软件的时候,出现2502,2503的问题
  13. ArcGis制作三维地形图教程
  14. iOS 真机测试错误解决An App ID with Identifier ...is not available
  15. RK3188 5.1平台PCM2708 USB声卡调试
  16. 写作之:syetem model和problem formulation
  17. 大佬分享:180+道Java面试题目!含答案解析!
  18. 力扣 338. 比特位计数
  19. 龙芯千元电脑配置曝光 商用化产品即将面世
  20. vue仿京东放大镜加商品缩略图轮播组件

热门文章

  1. smplayer_Windows上的SMPlayer入门(更好地播放电影)
  2. 445端口是什么,怎么关闭?
  3. 如何解开payload.bin获取包括Android内核在内的系统镜像文件?payload.bin解包教程
  4. 使用PHP编写的基于MySQL博客模板-可直接使用
  5. java 获取视频第一帧 | Java工具类
  6. solver参数详解
  7. Android图片轮播控件——Banner
  8. C++基础练习(1)
  9. unity 球体表面平均分割点
  10. 超调量怎么计算公式_matlab超调量怎么计算 求超调量、上升时间、峰值时间、调节时间 - 西部娱乐网...