「一本通 4.1 例 3」校门外的树 (loj10115)
题目描述
原题来自:Vijos P1448
校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两种操作:
- K=1,读入 l,r表示在 l 到 r 之间种上一种树,每次操作种的树的种类都不同;
- K=2,读入 l,r表示询问 l 到 r之间有多少种树。
注意:每个位置都可以重复种树。
输入格式
第一行 n,m表示道路总长为 n,共有 m 个操作;
接下来 m 行为 m 个操作。
输出格式
对于每个 k=2 输出一个答案。
样例
样例输入
5 4
1 1 3
2 2 5
1 2 4
2 3 5
样例输出
1
2
数据范围与提示
对于 20% 的数据,1≤n,m≤100
对于 60% 的数据,1≤n≤10^3,1≤m≤5×10^4
对于 100% 的数据,1≤n,m≤5×10^4,保证 l,r>0
#include<cstdio> #include<iostream> #include<cstring> using namespace std; const long long maxn=50010; int n, m; inline void qread(int &x){x = 0;int ch = getchar();while(ch < '0' || ch > '9') ch =getchar();while(ch >='0' && ch <= '9') x = 10 * x + ch - 48, ch = getchar(); } struct BItree{int data[maxn];BItree(){memset(data, 0, sizeof(data));}void add(int x){for(; x<=maxn-10; x += (x&-x))data[x]++;}int sum(int x){int ans = 0;for(; x; x -= (x&-x))ans += data[x];return ans; } }; int main(void) {BItree left, right;qread(n), qread(m);while(m--){int x, y, z;qread(x), qread(y), qread(z);if(x-1){printf("%d\n", left.sum(z) - right.sum(y - 1));}else{left.add(y);right.add(z);}} }
思路:
建两个树状数组,其中一个存储从1-n区间左端点的数目,另一个存储1-n区间右端点的数目,则l-r内树的种数即为right(r) - left(l-1).
,保证 l,r>0l,r\gt 0l,r>0。3,1≤m≤5×104;
对于 100%100\%100% 的数据,1≤n,m≤5×1041\le n,m\le 5\times 10^41≤n,m≤5×104,保证 l,r>0l,r\gt 0l,r>0。
转载于:https://www.cnblogs.com/junk-yao-blog/p/9470876.html
「一本通 4.1 例 3」校门外的树 (loj10115)相关推荐
- Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)
题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...
- #10115. 「一本通 4.1 例 3」校门外的树
描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l. ...
- 树状数组(二)——#10115. 「一本通 4.1 例 3」校门外的树
题目链接:https://loj.ac/problem/10115 解题思路 一开始误会了重复种树的意思,以为是线段树染色QAQ,后来知道了重复种树是指该位置可以种无限棵树,用树状数组就能解决.我们用 ...
- 【C++】「一本通 1.1 例 4」加工生产调度
「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...
- LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】
10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...
- 【C++】「一本通 1.1 例 2」种树
「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...
- #10001. 「一本通 1.1 例 2」种树
#10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...
- 【C++】「一本通 1.1 例 5」智力大冲浪
「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...
- #10003. 「一本通 1.1 例 4」加工生产调度(贪心)
加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...
最新文章
- idea上实现github代码同步
- echarts词云图形状_怎么用Python画出好看的词云图?
- opencv学习笔记7:图像加法与图像融合
- Yii2 主从 数据库
- Visual Studio中使用Git Flow
- linux图形界面 革命,Windows 95带来的革命
- html div数据替换,在contenteditable div中替换innerHTML
- linux c语言 文件拷贝,怎么在linux下用c编程实现文件的复制
- UserCF、 KNN 和 TopK
- 游戏中的碰撞检测(转)
- 基于OpenGL编写一个简易的2D渲染框架-11 重构渲染器-Renderer
- goahead webserver源码分析
- 机器学习大作业---文献综述
- 中外 凸凹函数的定义是相反的
- APP推广有哪些渠道
- 3.4 Postman调用手顺(Netsuite相关)
- 联通云服务器怎么修改密码,桌面云使用说明
- Semantic Mapping in ROS学习及代码运行
- html列表太多转为下滑菜单,利用CSS过渡属性Transition制作缓缓弹出的纯CSS下拉菜单...
- 用计算机解决问题时 为什么要用计算思维,在问题解决活动中培养计算思维