题目描述

校门外马路上本来从编号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行种上又被拔掉的树苗数目。

输入输出样例

输入样例#1:

10 3
0 2 6
1 1 8
0 5 7
输出样例#1:

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 校门外的树(增强版)未完工的更多相关文章

  1. 洛谷——P1276 校门外的树(增强版)

    P1276 校门外的树(增强版) 题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是 ...

  2. 洛谷 P1276 校门外的树(增强版)

    题目描述 校门外马路上本来从编号0到L,每一编号的位置都有1棵树.有砍树者每次从编号A到B处连续砍掉每1棵树,就连树苗也不放过(记 0 A B ,含A和B):幸运的是还有植树者每次从编号C到D 中凡是 ...

  3. 洛谷P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  4. 洛谷——P1047 校门外的树

    P1047 校门外的树 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是1米.我们可以把马路看成一个数轴,马路的一端在数轴0的位置,另一端在L的位置:数轴上的每个整数点,即0 ...

  5. 洛谷 P1047 校门外的树 题解

    Case 1. 本题其实不难,直接模拟就可以了.时间复杂度: \(O(L \times M)\) Case 2. 考虑一个简单的增强:把原来的: \[L \leq 10^4,M \leq 10^2 \ ...

  6. 洛谷 P1047 校门外的树

    #include<iostream> #include<vector> #include<algorithm> using namespace std; ]; in ...

  7. 洛谷P1047校门外的树题解

    题目 此题是一个模拟题,但需要注意的一点就是它的树是从数轴的0开始,所以我们也要从0开始,这样才能实现代码. 代码: #include<iostream> using namespace ...

  8. 洛谷 p1047 校门外的树 线段树做法

    非常easy, 注意一下它是两端开始,也就是说0的位置也有一棵树就好了 我由于太弱了,一道红题交了4,5遍 由于树的砍了就没了,lazy标记最大就是1; 直接贴代码吧 #include<bits ...

  9. 洛谷 P1047 校门外的树(待完善)

    链接:https://www.luogu.org/problemnew/show/P1047 题目: 题目描述 某校大门外长度为L的马路上有一排树,每两棵相邻的树之间的间隔都是11米.我们可以把马路看 ...

随机推荐

  1. discuz x2.5用户注册后邮箱认证后无法收到邮件或者直接进垃圾箱

    又是一个周末,jquery特效继续折腾我那discuz论坛,我开启了个邮箱验证,恶意注册的太恶心了,没有办法. 能稍微屏蔽点,但是问题来了,据亲们反应,无法收到验证邮件,或者有时间直接进入垃圾箱,这个 ...

  2. LN : leetcode 684 Redundant Connection

    lc 684 Redundant Connection 684 Redundant Connection In this problem, a tree is an undirected graph ...

  3. OpenGL 透视投影推导图解

    有它足够了,转载自:http://blog.sina.com.cn/s/blog_73428e9a0102v920.html

  4. 模拟ssh的远程网络传输

    粘包产生的原因分析: 第一点:客户端向服务端发起命令请求,服务端接受命令请求,并返回对应的信息,如果信息过大,客户端一次接受不了,那么下一次请求依然返回 上一个命令的内容,就出现了粘包的情况. 第二点 ...

  5. 洛谷P3254 圆桌问题(最大流)

    题意 $m$个不同单位代表参加会议,第$i$个单位有$r_i$个人 $n$张餐桌,第$i$张可容纳$c_i$个代表就餐 同一个单位的代表需要在不同的餐桌就餐 问是否可行,要求输出方案 Sol 比较zz ...

  6. 初识node,原理与浏览器何其相似

    话不多说,直接上图. 今日入手开始学习Nodejs,加油吧,小小前端的大V梦ヾ(◍°∇°◍)ノ゙

  7. Ubuntu 创建docker 容器 系列一

    docker 官网安装地址:https://docs.docker.com/install/linux/docker-ce/ubuntu/ 1.Ubuntu的版本要在12.04 LTS 以上,使用un ...

  8. 原创:四种Linux系统开机启动项优命令超给力超详细详解

    老葵花哥哥又开课了 接下来是你们的齐天大圣孙悟空给你们带来的详细版Linux系统开机启动优化四种命令 第一种方法是很正常的 第二种有点难理解 第三种来自我的一个奇思妙想 本文档秉承 不要钱也不要臀部的 ...

  9. Linux/Windows 实用工具简记

    以下只是开发中可能用的比较多的工具,另外还有其他很多未曾提及的实用工具.Linux篇: 1.链接过程的调试:主要用于查看构建过程:如链接时加载的动态库以及运行时加载动态库过程的调试 支持LD_DEBU ...

  10. mysql-mmm 部署高可用集群

    集群的部署(mysql-mmm + 主从同步) 什么是集群? 多台服务器提供相同的服务 集群的好处? 节省成本. 配置集群? 准备环境:准备4台数据库服务器 准备服务器,能够ping 4 台数据库服务 ...