Vijos P1103 校门外的树【线段树,模拟】
校门外的树
描述
某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米。我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置;数轴上的每个整数点,即0,1,2,……,L,都种有一棵树。
由于马路上有一些区域要用来建地铁。这些区域用它们在数轴上的起始点和终止点表示。 已知任一区域的起始点和终止点的坐标都是整数,区域之间可能有重合的部分。现在要把这些区域中的树(包括区域端点处的两棵树)移走。你的任务是计算将这些树都移走后,马路上还有多少棵树。
格式
输入格式
输入的第一行有两个整数:L(1 <= L <= 10000)和 M(1 <= M <= 100),L代表马路的长度,M代表区域的数目,L和M之间用一个空格隔开。接下来的M行每行包含两个不同的整数,用一个空格隔开,表示一个区域的起始点和终止点的坐标。
输出格式
输出包括一行,这一行只包含一个整数,表示马路上剩余的树的数目。
样例1
样例输入1
500 3
150 300
100 200
470 471
样例输出1
298
限制
每个测试点1s
来源
NOIP2005普及组第二题
题目链接:https://vijos.org/p/1103
思路:我估计也是智障了,这题明显可以用模拟做,我TM竟然用线段树写,还RE了两发,数组开了四倍你还要我怎样,结果我开了八倍过了QAQ!
下面给出线段树写法:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=20010; 4 int n,m,ans=1; 5 struct Node 6 { 7 int l,r,sum; 8 }tree[N<<2]; 9 inline void buildtree(int l,int r,int pos) 10 { 11 tree[pos].l=l; 12 tree[pos].r=r; 13 if(l==r) 14 { 15 tree[pos].sum=1; 16 return; 17 } 18 int mid=(tree[pos].l+tree[pos].r)/2; 19 buildtree(l,mid,pos*2); 20 buildtree(mid+1,r,pos*2+1); 21 tree[pos].sum=tree[pos*2].sum+tree[pos*2+1].sum; 22 } 23 inline int query(int l,int r,int pos) 24 { 25 if(tree[pos].l==l&&tree[pos].r==r) 26 return tree[pos].sum; 27 if(tree[pos].r<l||tree[pos].l>r) 28 return 0; 29 return query(l,r,pos*2)+query(l,r,pos*2+1); 30 } 31 inline void update(int l,int r,int pos) 32 { 33 if(tree[pos].l==l&&tree[pos].r==r) 34 { 35 tree[pos].sum=0; 36 return; 37 } 38 if(tree[pos].l>r||tree[pos].r<l) 39 return; 40 update(l,r,pos*2); 41 update(l,r,pos*2+1); 42 tree[pos].sum=tree[pos*2].sum+tree[pos*2+1].sum; 43 } 44 int main() 45 { 46 cin>>n>>m; 47 buildtree(1,n,1); 48 for(int i=1;i<=m;i++) 49 { 50 int l,r; 51 scanf("%d%d",&l,&r); 52 if(!l) 53 ans=0; 54 update(!l?1:l,r,1); 55 } 56 cout<<query(1,n,1)+ans<<endl; 57 return 0; 58 }
模拟做法:简单解释一下,做法就是在【0,r】我们全部赋值为1,然后for一遍删去重复部分,非常简单,智障的我开始没想到,但是如果这题L的数据是1000000,线段树依然是正解!QAQ
下面给出模拟的代码:
1 #include <bits/stdc++.h> 2 using namespace std; 3 const int N=10010; 4 int a[N]; 5 int main() 6 { 7 int n,m; 8 cin>>n>>m; 9 for(int i=0;i<=n;i++) 10 a[i]=1; 11 for(int i=1;i<=m;i++) 12 { 13 int l,r; 14 cin>>l>>r; 15 for(int j=l;j<=r;j++) 16 { 17 a[j]=0; 18 } 19 } 20 int sum=0; 21 for(int i=0;i<=n;i++) 22 { 23 if(a[i]) 24 sum++; 25 } 26 cout<<sum<<endl; 27 return 0; 28 }
Vijos P1103 校门外的树【线段树,模拟】相关推荐
- 树套树-线段树套平衡树
作用 线段树的作用是区间修改和查询,平衡树的作用是查询第k大,k的排名,前驱,后继.这两个结合起来,就变成了可以区间修改和查询第k大,k的排名,前驱,后继的数据结构:树套树-线段树套平衡树. 实现 先 ...
- Vijos P1448 校门外的树【多解,线段树,树状数组,括号序列法+暴力优化】
校门外的树 描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K= ...
- vijos 1448 校门外的树 树状数组
描述 校门外有很多树,有苹果树,香蕉树,有会扔石头的,有可以吃掉补充体力的-- 如今学校决定在某个时刻在某一段种上一种树,保证任一时刻不会出现两段相同种类的树,现有两个操作: K=1,K=1,读入l. ...
- 线段树线段树的创建线段树的查询单节点更新区间更新
目录 线段树 什么是线段树? 线段树的创建 线段树的查询 单节点更新 区间更新 未完待续 线段树 实现问题:常用于求数组区间最小值 时间复杂度:(1).建树复杂度:nlogn.(2).线段树算法复杂度 ...
- loj 523 「LibreOJ β Round #3」绯色 IOI(悬念) 霍尔定理+基环树+线段树
题目分析 神仙题(确信) 首先,j−aij-a _ ij−ai和ai−ja _ i-jai−j互为相反数,若其中最小值为bib _ ibi,则一个为bib _ ibi一个为m−bim-b _ ...
- 线段树 ---- 线段树维护线段相加+滑动变长窗口 2021牛客多校第7场 F xay loves trees
题目大意: 给你两个大小相同的树但是形状不一定一样 叫你选出最大的子集,满足下面两个条件 在第一颗树上是一条链 在第二颗树上任意两个点都不是祖先关系 解题思路: 首先我们现在第二颗树上面把每个点的df ...
- BZOJ 3685: 普通van Emde Boas树( 线段树 )
建颗权值线段树就行了...连离散化都不用... 没加读入优化就TLE, 加了就A掉了...而且还快了接近1/4.... ---------------------------------------- ...
- 2021CCPC(桂林) - Suffix Automaton(后缀树+线段树)
题目链接:点击查看 题目大意:给出一个长度为 nnn 的字符串,再给出 qqq 次询问,每次询问需要输出本质不同第 kkk 小的子串的起止位置.如果有多个答案,输出起点最小的那个. 本题规定字符串大小 ...
- 牛客 - sequence(笛卡尔树+线段树)
题目链接:点击查看 题目大意:给出一个长度为 n 的数列 a 和数列 b ,求 题目分析:不算难的题目,对于每个 a[ i ] 求一下贡献然后维护最大值就好,具体思路就是,先找出每个 a[ i ] 左 ...
最新文章
- 嵌入式Linux设备驱动程序:在运行时读取驱动程序状态
- 微软发布通用型AI框架Avatar Framework
- Java学习笔记24
- php找不到指定的模块,php中的dll“无法找到指定的模块”
- java使用htmlunit工具抓取js中加载的数据
- cocos2d-x学习笔记16:记录存储1:CCUserDefault
- js data日期初始化的5种方法
- IdentityServer4系列 | 客户端凭证模式
- Nginx实用教程(二):配置文件入门
- 如何使用SpingMvc实现省市县三级级联?
- 图解android开发在界面上显示图片
- 解构淘宝SPM/SCM流量跟踪体系
- [迁移] Luac的使用
- 关于icon小图标的实现
- java 情感分析_Flink基于Alink中文情感分析示例(Java版本)
- JAVA萌新学习day17.18天 数据库MySQL
- Base64系列第一篇 Base64介绍
- 【嵌入式Linux开发一路清障-连载03】Ubuntu22.04使用Mount加载硬盘或NAS等硬盘
- FME对CAD扩展属性的读写
- 智能优化与机器学习结合算法实现时序数据预测matlab代码清单
热门文章
- 电脑日常故障及处理(二)
- 我在51CTO微职位学软考——网络工程师
- [100]第三波常用命令
- 如何查看经过iOS优化的PNG图片
- Web 探索之旅 | 第二部分第一课:客户端语言
- AndroidMainifest标签说明2——lt;activitygt;
- pull to load more data
- Convert Sorted Array to Binary Search Tree
- 整理find命令输出格式
- Forefront_TMG_2010-TMG建立Remote ***