【学术篇】luogu2184贪婪大陆
题目大意:
支持两种操作,区间添加一种新元素,查询区间颜色种数..
题目标签是线段树啊,我也本来想写一个线段树,后来写不出来……(我太弱了orz)
然后就草率地看了看题解里面的思路咯,感觉思路非常的不错,于是我就A掉这题之后写了这篇blog…
我们通过这幅图可以看到:
- 我们直接统计区间的覆盖不是很好统计, 考虑前缀
- 当前我们已经进行了10次覆盖
- 从[1,R]这个区间中有9个覆盖
- 但是其中有3个覆盖完全在L的左侧(即右端点在[1,L-1])
- 所以应该只有6次覆盖在[L,R]范围内
- ∴ans=6
我们可以发现,这是一个区间覆盖的问题,询问的答案是[1,r]中的种类数减去[1,l-1] 中的右端点数…
然后此题就沦为了一道区间和单点修改单点和区间查询的题目…
我们可以用两个不同的数据结构来分别维护右端点数目和种类数…我们整理了一下发现:
- 对于右端点,我们修改的时候在右端点单点加,查询的时候区间查询[1,l-1]..
- 对于种类数,我们修改的时候做区间加,往区间[l,n]加上,查询的时候单点查 r点的值..
所以,一个单点加区间查,一个区间加单点查,就是这样两个树状数组的基本操作了…
而区间操作都是含1和n的,所以我们就可以省掉一些步骤..
最后写出来就是这样:
#include <cstdio>
const int N=101010;
inline int gnum(){
int a=0;char c=getchar();for(;c<'0'||c>'9';c=getchar());
for(;c>='0'&&c<='9';c=getchar()) a=(a<<1)+(a<<3)+c-'0'; return a;
}
int t[2][N],n,m;
void add(int *c,int x){for(;x<=n;x+=x&-x)++c[x];}
int query(int *c,int x){int s=0;for(;x;x-=x&-x)s+=c[x];return s;}
int main(){
n=gnum(),m=gnum();
for(int i=1;i<=m;++i){
int o=gnum(),l=gnum(),r=gnum();
//端点:单点r加1 区间1..l-1查
//种类:区间l..n加1 单点r查
if(o-2) add(t[0],l),add(t[1],r);
else printf("%d\n",query(t[0],r)-query(t[1],l-1));
}
}
这样就可以咯~
【学术篇】luogu2184贪婪大陆的更多相关文章
- COGS1008. 贪婪大陆[树状数组 模型转换]
1008. 贪婪大陆 ★★ 输入文件:greedisland.in 输出文件:greedisland.out 简单对比时间限制:1 s 内存限制:128 MB 试题四:贪婪大陆 [题 ...
- P2184 贪婪大陆
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小FF的Tower defence宣告失败……人类被蚂蚁们逼到了Greed Island上的一个海湾.现在,小FF的后方是一望无际的大海, 前 ...
- Cogs 1008. 贪婪大陆(树状数组)
贪婪大陆 难度等级 ★★ 时间限制 1000 ms (1 s) 内存限制 128 MB 测试数据 10 简单对比 输入文件:greedisland.in 输出文件:greedisland.out 简单 ...
- 洛谷 P2184 贪婪大陆 解题报告
P2184 贪婪大陆 题目背景 面对蚂蚁们的疯狂进攻,小\(FF\)的\(Tower\) \(defence\)宣告失败--人类被蚂蚁们逼到了\(Greed\) \(Island\)上的一个海湾.现在 ...
- AC日记——贪婪大陆 洛谷 P2184
贪婪大陆 思路: 树状数组: 跪烂.. 代码: #include <bits/stdc++.h> using namespace std; #define maxn 100005 int ...
- 【洛谷P2184】贪婪大陆
贪婪大陆 题目链接 对于一个区间[l,r],右端点在l左边即[1,l-1]中的区间与区间[l,r]没有交集, 左端点在r右边即[r,n]中的区间与区间[l,r]没有交集, 其余区间必与[l,r]有交集 ...
- cogs——1008. 贪婪大陆(清华巨佬代码)——树状数组
1008. 贪婪大陆 ★★ 输入文件:greedisland.in 输出文件:greedisland.out 简单对比时间限制:1 s 内存限制:128 MB 试题四:贪婪大陆 [题 ...
- luoguP2184 贪婪大陆 题解(树状数组)
P2184 贪婪大陆 题目 其实很容易理解就是询问一段区间内有多少段不同的区间 然后再仔细思索一下会发现: 1.只要一个区间的开头在一个节点i的左边,那么这个区间包含在区间1~i中. 2.只要一个区 ...
- 【学术篇】51nod 1238 最小公倍数之和
这是一道杜教筛的入(du)门(liu)题目... 题目大意 求 \[ \sum_{i=1}^n\sum_{j=1}^nlcm(i,j) \] 一看就是辣鸡反演一类的题目, 那就化式子呗.. \[ \s ...
随机推荐
- BZOJ 2159: Crash 的文明世界(组合数学+第二类斯特林数+树形dp)
传送门 解题思路 比较有意思的一道数学题.首先\(n*k^2\)的做法比较好想,就是维护一个\(x^i\)这种东西,然后转移的时候用二项式定理拆开转移.然后有一个比较有意思的结论就是把求\(x^i\) ...
- P1613 跑路(倍增)
P1613 跑路(倍增) 题目描述 小A的工作不仅繁琐,更有苛刻的规定,要求小A每天早上在6:00之前到达公司,否则这个月工资清零.可是小A偏偏又有赖床的坏毛病.于是为了保住自己的工资,小A买了一个十 ...
- Go将统治下一个10年?Go语言发展现状分析
“本文是国内Go语言大中华区首席布道师——许式伟,在QCon2015上海站上的分享.他预测Go语言10年内一定会超过C和java,并且统治这一个10年. Go语言语法及标准库变化 Go从1.0版本到现 ...
- LeetCode 181. Employees Earning More Than Their Managers (超过经理收入的员工)
题目标签: 题目给了我们一个 员工表,包括经理.员工会有经理的id. 这里可以重复 利用两次 表格,表格a, 表格b,当a 员工的经理id 等于 b员工时候,在从中找到员工工资大于经理的.具体看co ...
- Area--->AreaRegistrationContext.MapRoute
文章引导 MVC路由解析---IgnoreRoute MVC路由解析---MapRoute MVC路由解析---UrlRoutingModule Area的使用 Area--->AreaRegi ...
- 剑指offer——26树的子结构
题目描述 输入两棵二叉树A,B,判断B是不是A的子结构.(ps:我们约定空树不是任意一个树的子结构) 题解: 注意,所谓的子结构,是树的形状和值相同,并非判断B是不是A的一部分[如果是这样,那就是 ...
- SecureRandom的正确使用
目录 1. 什么是安全的随机数? 2. 怎么得到安全的随机数 3. SecureRandom最佳实践 3.1 基本用法 3.2 关于种子的设置 3.3 熵源不足时阻塞问题 4. 小结 1. 什么是安全 ...
- 实时查询系统架构:spark流式处理+HBase+solr/ES查询
最近要做一个实时查询系统,初步协商后系统的框架 1.流式计算:数据都给spark 计算后放回HBase 2.查询:查询采用HBase+Solr/ES
- Xtrabackup 热备
Xtrabackup介绍Xtrabackup是由percona开源的免费数据库热备份软件,它能对InnoDB数据库和XtraDB存储引擎的数据库非阻塞地备份(对于MyISAM的备份同样需要加表锁):m ...
- USACO 2008 January Silver Telephone Lines /// 二分最短路 邻接表dijkstra oj22924
题目大意: 一共有N (1 ≤ N ≤ 1,000)个电线杆,有P P (1 ≤ P ≤ 10,000)对电线杆是可以连接的, 用几条线连接在一起的电线杆之间都可相互通信,现在想要使得电线杆1和电线杆 ...