题目描述

原题来自: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×10​4​​;
对于 100%100\%100% 的数据,1≤n,m≤5×1041\le n,m\le 5\times 10^41≤n,m≤5×10​4​​,保证 l,r>0l,r\gt 0l,r>0。

转载于:https://www.cnblogs.com/junk-yao-blog/p/9470876.html

「一本通 4.1 例 3」校门外的树 (loj10115)相关推荐

  1. Loj 10115 「一本通 4.1 例 3」校门外的树 (树状数组)

    题目链接:https://loj.ac/problem/10115 题目描述 原题来自:Vijos P1448 校门外有很多树,学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的 ...

  2. #10115. 「一本通 4.1 例 3」校门外的树

    描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l. ...

  3. 树状数组(二)——#10115. 「一本通 4.1 例 3」校门外的树

    题目链接:https://loj.ac/problem/10115 解题思路 一开始误会了重复种树的意思,以为是线段树染色QAQ,后来知道了重复种树是指该位置可以种无限棵树,用树状数组就能解决.我们用 ...

  4. 【C++】「一本通 1.1 例 4」加工生产调度

    「一本通 1.1 例 4」加工生产调度 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1425 LibreOJ ...

  5. LibreOJ10082. 「一本通 3.3 例 1」Word Rings【二分+SPFA】

    10082. 「一本通 3.3 例 1」Word Rings [题目描述] 传送门 [题解] 将一个字符串看成一条边,字符两端的字符看成节点,长度看成权值.二分枚举答案,最后SPFA刷正环,因为只要有 ...

  6. 【C++】「一本通 1.1 例 2」种树

    「一本通 1.1 例 2」种树 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [解析] [代码] [来源] 一本通题库-1423 LibreOJ-10001 vjud ...

  7. #10001. 「一本通 1.1 例 2」种树

    #10001. 「一本通 1.1 例 2」种树 满足n个区间种树的要求,求最少种多少棵数 思路 按照区间的尾巴来排序,因为如果区间有重叠的种在第一个区间的尾巴可以使得种树更少,所有每次始从尾巴开始种树 ...

  8. 【C++】「一本通 1.1 例 5」智力大冲浪

    「一本通 1.1 例 5」智力大冲浪 [来源] [题目描述] [输入格式] [输出格式] [输入样例] [输出样例] [数据范围] [解析] [代码] [来源] 一本通题库-1426 LibreOJ- ...

  9. #10003. 「一本通 1.1 例 4」加工生产调度(贪心)

    加工生产调度 题目描述 某工厂收到了n个产品的订单,这n个产品分别在A.B两个车间加工,并且必须先在A车间加工后才可以到B车间加工. 某个产品i在A.B两车间加工的时间分别为Ai.Bi.询问怎样安排这 ...

最新文章

  1. idea上实现github代码同步
  2. echarts词云图形状_怎么用Python画出好看的词云图?
  3. opencv学习笔记7:图像加法与图像融合
  4. Yii2 主从 数据库
  5. Visual Studio中使用Git Flow
  6. linux图形界面 革命,Windows 95带来的革命
  7. html div数据替换,在contenteditable div中替换innerHTML
  8. linux c语言 文件拷贝,怎么在linux下用c编程实现文件的复制
  9. UserCF、 KNN 和 TopK
  10. 游戏中的碰撞检测(转)
  11. 基于OpenGL编写一个简易的2D渲染框架-11 重构渲染器-Renderer
  12. goahead webserver源码分析
  13. 机器学习大作业---文献综述
  14. 中外 凸凹函数的定义是相反的
  15. APP推广有哪些渠道
  16. 3.4 Postman调用手顺(Netsuite相关)
  17. 联通云服务器怎么修改密码,桌面云使用说明
  18. Semantic Mapping in ROS学习及代码运行
  19. html列表太多转为下滑菜单,利用CSS过渡属性Transition制作缓缓弹出的纯CSS下拉菜单...
  20. 用计算机解决问题时 为什么要用计算思维,在问题解决活动中培养计算思维

热门文章

  1. AsyncTask源代码解析
  2. android --多线程下载
  3. iOS截取视频预览图,截图方向错误的解决
  4. logstash grok插件语法介绍
  5. [Unity3d][NGUI]打包NGUI预制件成Assetbundle 两种思路.
  6. java Vector.toArray 与强制类型转换
  7. 某化工学院安装锐捷elog
  8. 庆祝.Net BI团队成立!
  9. 一步一步手绘Spring AOP运行时序图(Spring AOP 源码分析)
  10. [Java] 蓝桥杯ADV-185 算法提高 五次方数