洛谷P1276 校门外的树(增强版)未完工
题目描述
校门外马路上本来从编号0到L,每一编号的位置都有1棵树。有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B);幸运的是还有植树者每次从编号C到D 中凡是空穴(树被砍且还没种上树苗或树苗又被砍掉)的地方都补种上树苗(记 1 C D,含C和D);问最终校门外留下的树苗多少棵?植树者种上又被砍掉的树苗有多少棵?
输入输出格式
输入格式:
第一行L和N,表示校园外原来有L+1棵树,并有N次砍树或种树的操作。
以下N行,砍树或植树的标记和范围,每行3个整数。
L(1 <= L <= 10000)和 N(1 <= N <= 100)
输出格式:
共两行。第1行校门外留下的树苗数目,第2行种上又被拔掉的树苗数目。
输入输出样例
10 3
0 2 6
1 1 8
0 5 7
3
2
线段树写炸了,模拟也不想写,放个代码在这里等以后我回来填坑吧.
#include <cstdio>
#include <cstring>
#include <iostream>
#include <algorithm>
#include <cmath> using namespace std; int sum1[],sum2[],ans,ans2,flag[];
int n,ll; void pushup(int o)
{
sum1[o] = sum1[o * ] + sum1[o * + ];
sum2[o] = sum2[o * ] + sum2[o * + ];
} void build(int l,int r,int o)
{
if (l == r)
{
sum1[o] = ;
sum2[o] = ;
return;
}
int mid = (l + r) >> ;
build(l,mid,o * );
build(mid + ,r,o * + );
pushup(o);
} void pushdown(int o,int len)
{
if (flag[o] == )
{
flag[o * ] = flag[o * + ] = flag[o];
sum1[o * ] = sum1[o * + ] = sum2[o * ] = sum2[o * + ] = ;
flag[o] = ;
}
else
if (flag[o] == )
{
flag[o * ] = flag[o * + ] = flag[o];
flag[o] = ;
sum2[o * ] = (len - (len >> )) - sum1[o * ];
sum2[o * + ] = (len >> ) - sum1[o * + ];
}
} void cut(int l,int r,int o,int x,int y)
{
if (x <= l && r <= y)
{
ans2 += sum2[o];
ans -= sum2[o];
sum1[o] = ;
sum2[o] = ;
flag[o] = ;
return;
}
pushdown(o,r - l + );
int mid = (l + r) >> ;
if (x <= mid)
cut(l,mid,o * ,x,y);
if (y > mid)
cut(mid + ,r,o * + ,x,y);
pushup(o);
} void plant(int l,int r,int o,int x,int y)
{
if (x <= l && r <= y)
{
ans += (r - l + ) - sum1[o];
sum2[o] = (r - l + ) - sum1[o];
flag[o] = ;
return;
}
pushdown(o,r - l + );
int mid = (l + r) >> ;
if (x <= mid)
plant(l,mid,o * ,x,y);
if (y > mid)
plant(mid + ,r,o * + ,x,y);
pushup(o);
} int main()
{
scanf("%d%d",&ll,&n);
build(,ll + ,);
for (int i = ; i <= n; i++)
{
int op,l,r;
scanf("%d%d%d",&op,&l,&r);
l++;
r++;
if (op == )
cut(,ll + ,,l,r);
if (op == )
plant(,ll + ,,l,r);
}
printf("%d\n%d",sum2[],ans2); return ;
}
洛谷P1276 校门外的树(增强版)未完工的更多相关文章
- 洛谷——P1276 校门外的树(增强版)
P1276 校门外的树(增强版) 题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是 ...
- 洛谷 P1276 校门外的树(增强版)
题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是还有植树者每次从编号C到D 中凡是 ...
- 洛谷P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 洛谷——P1047 校门外的树
P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...
- 洛谷 P1047 校门外的树 题解
Case 1. 本题其实不难,直接模拟就可以了.时间复杂度: \(O(L \times M)\) Case 2. 考虑一个简单的增强:把原来的: \[L \leq 10^4,M \leq 10^2 \ ...
- 洛谷 P1047 校门外的树
#include<iostream> #include<vector> #include<algorithm> using namespace std; ]; in ...
- 洛谷P1047校门外的树题解
题目 此题是一个模拟题,但需要注意的一点就是它的树是从数轴的0开始,所以我们也要从0开始,这样才能实现代码. 代码: #include<iostream> using namespace ...
- 洛谷 p1047 校门外的树 线段树做法
非常easy, 注意一下它是两端开始,也就是说0的位置也有一棵树就好了 我由于太弱了,一道红题交了4,5遍 由于树的砍了就没了,lazy标记最大就是1; 直接贴代码吧 #include<bits ...
- 洛谷 P1047 校门外的树(待完善)
链接:https://www.luogu.org/problemnew/show/P1047 题目: 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米.我们可以把马路看 ...
随机推荐
- HBase文档操作--练习篇
1.查询学生的所有信息 数据准备 var persons = [{ name:"jim", age:25, email:"75431457@qq.com", c ...
- neo4j(图数据库)是什么?
不多说,直接上干货! 作为一款强健的,可伸缩的高性能数据库,Neo4j最适合完整的企业部署或者用于一个轻量级项目中完整服务器的一个子集存在. 它包括如下几个显著特点: 完整的ACID支持 高可用性 轻 ...
- js数据类型之判断
js有几种类型,具体是:字符串(String).数字(Number).布尔(Boolean).数组(Array).对象(Object).空(Null).未定义(Undefined). js提供了typ ...
- 成为Android高手必须掌握的8项基本要求
[1] Android操作系统概述 1. Android系统架构. 2. Android利用设计理念. 3. Android 开源知识. 4. Android 参考网站与权威信息.[2] Androi ...
- Java练习题02
问题: 编程求一个整数数组的最大值.最小值.平均值和所有元素的和. 代码: public class Page99{ public static void main(String args[] ...
- sprintf使用时需要注意的问题
- 分布式技术EJB3_分库架构 - 【动力节点官网】北京Java …
分布式技术EJB3_分库架构 - [动力节点官网]北京Java … http://www.bjpowernode.com/xiazai/2220.html <程序天下--EJB JPA数据库持久 ...
- (转)编码剖析Spring装配基本属性的原理
http://blog.csdn.net/yerenyuan_pku/article/details/52856465 上回我们已经讲到了Spring依赖注入的第一种方式,现在我们来详解第二种方式,须 ...
- String系列之replaceAll方法替换.
直接使用String类的replaceall方法的第一个参数并不是简单的字符串,而是一个正则表达式.在正则表达式中,英文点号(.)表示任意字符,所以你原先的写法会把所有字符都替换成空白. 转义使用所以 ...
- @click.native 会触发原生 click事件 vue
@click.native 会触发原生 click事件 vue