ZOJ 3324 Machine
线段树,延迟标记。
记录一下每个节点代表的区间的最小值,以及左右端点是否为最小值,记录区间被下压几次作为延迟标记,再记录一下这个区间中有多少个最小值的连通块。
$n$最大有$1$亿,可以开动态线段树避免离散化。
#pragma comment(linker, "/STACK:1024000000,1024000000")
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<vector>
#include<map>
#include<set>
#include<queue>
#include<stack>
#include<ctime>
#include<iostream>
using namespace std;
typedef long long LL;
const double pi=acos(-1.0),eps=1e-;
void File()
{
freopen("D:\\in.txt","r",stdin);
freopen("D:\\out.txt","w",stdout);
}
template <class T>
inline void read(T &x)
{
char c = getchar();
x = ;
while(!isdigit(c)) c = getchar();
while(isdigit(c))
{
x = x * + c - '';
c = getchar();
}
} struct X
{
int L,R;
int Lson,Rson;
int Min;
bool A,B;
int ans;
int flag;
}s[];
int n,m,sz; int add(int ll,int rr)
{
s[sz].L=ll; s[sz].R=rr;
s[sz].Lson=s[sz].Rson=-;
s[sz].Min=;
s[sz].A=s[sz].B=;
s[sz].ans=;
s[sz].flag=;
sz++;
return sz-;
} void pushDown(int rt)
{
int m=(s[rt].L+s[rt].R)/;
if(s[rt].Lson==-) s[rt].Lson=add(s[rt].L,m);
if(s[rt].Rson==-) s[rt].Rson=add(m+,s[rt].R); if(s[rt].flag==) return; s[s[rt].Lson].flag+=s[rt].flag;
s[s[rt].Lson].Min+=s[rt].flag; s[s[rt].Rson].flag+=s[rt].flag;
s[s[rt].Rson].Min+=s[rt].flag; s[rt].flag=;
} void pushUp(int rt)
{
if(s[s[rt].Lson].Min==s[s[rt].Rson].Min)
{
s[rt].Min=s[s[rt].Lson].Min; s[rt].A=s[s[rt].Lson].A;
s[rt].B=s[s[rt].Rson].B; s[rt].ans=s[s[rt].Lson].ans+s[s[rt].Rson].ans; if(s[s[rt].Lson].B!=&&s[s[rt].Rson].A!=) s[rt].ans--;
} else if(s[s[rt].Lson].Min<s[s[rt].Rson].Min)
{
s[rt].Min=s[s[rt].Lson].Min;
s[rt].A=s[s[rt].Lson].A;
s[rt].B=;
s[rt].ans=s[s[rt].Lson].ans;
} else
{
s[rt].Min=s[s[rt].Rson].Min;
s[rt].B=s[s[rt].Rson].B;
s[rt].A=;
s[rt].ans=s[s[rt].Rson].ans;
}
} void update(int x,int L,int R,int rt)
{
if(L<=s[rt].L&&s[rt].R<=R)
{
s[rt].flag+=x;
s[rt].Min+=x;
return ;
} pushDown(rt); int m=(s[rt].L+s[rt].R)/; if(L<=m) update(x,L,R,s[rt].Lson);
if(R>m) update(x,L,R,s[rt].Rson); pushUp(rt);
} int main()
{
int T; scanf("%d",&T); int cas=;
while(T--)
{
scanf("%d%d",&n,&m);
printf("Case #%d:\n",cas++); sz=; add(,n); for(int i=;i<=m;i++)
{
char op[]; int L,R;
scanf("%s%d%d",op,&L,&R); L++; R++; if(op[]=='p') update(,L,R,);
else update(-,L,R,); if(s[].Min==) printf("%d\n",s[].ans);
else printf("0\n");
}
}
return ;
}
ZOJ 3324 Machine的更多相关文章
- zoj 3805 Machine
Machine Time Limit: 2 Seconds Memory Limit: 65536 KB In a typical assembly line, machines are c ...
- ZOJ 1364 Machine Schedule(二分图最大匹配)
题意 机器调度问题 有两个机器A,B A有n种工作模式0...n-1 B有m种工作模式0...m-1 然后又k个任务要做 每一个任务能够用A机器的模式i或b机器的模式j来完毕 机器開始都处于模式0 每 ...
- ZOJ 3805 Machine(二叉树,递归)
题意:一颗二叉树,求 “ 宽度 ” 思路:递归,貌似这个思路是对的,先记下,但是提交时超时, 1.如果当前节点只有左孩子,那么当前宽度等于左孩子宽度 2.如果当前节点只有右孩子,那么当前宽度等于 ...
- zoj 3325 Machine(线段树)
题意:0~n-1的数组,初始值为0:执行m个操作,每次操作执行后输出当前值为0的连续段的段数. 操作1: p i j : i~j区间的每个元素值减1 操作2: r i j :i~j区间的每个元素值加1 ...
- ZOJ Monthly, March 2018 题解
[题目链接] A. ZOJ 4004 - Easy Number Game 首先肯定是选择值最小的 $2*m$ 进行操作,这些数在操作的时候每次取一个最大的和最小的相乘是最优的. #include & ...
- ACM数据结构相关资料整理【未完成,待补充】
在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...
- POJ 1325、ZOJ 1364、HDU 1150 Machine Schedule - from lanshui_Yang
Problem Description As we all know, machine scheduling is a very classical problem in computer scien ...
- ZOJ 3407 Doraemon's Cake Machine [数学]
题意: 最多有2000组测试样例,每组样例代表n,m; n代表要把蛋糕平分的份数,m代表必须进行多少次操作. 一共有三种操作 1.竖切 经过蛋糕圆心,将蛋糕整个向下切. 2.横切 平行于蛋糕平 ...
- zoj 1366 Cash Machine
01背包加变形 动态规划的时候就犯浑了,每个状态都要记录的,我却只记录了当前状态的!! #include<stdio.h> #include<string.h> int max ...
随机推荐
- 上下文路径request.getContextPath();与${pageContext.request.contextPath}
(1) request.getContextPath();与${pageContext.request.contextPath}都是获取上下文路径: 1. request.getContextPath ...
- u3d局域网游戏网络(c# socket select 模型)——续
原文:http://www.cnblogs.com/saucerman/p/5555793.html 因为项目要加语音.语音数据都非常大.所以顺带就把之前写的网络模块一起测试了. 然后发现了一些bug ...
- UOJ#204 【APIO2016】Boat
Time Limit: 70 Sec Memory Limit: 256 MBSubmit: 559 Solved: 248 Description 在首尔城中,汉江横贯东西.在汉江的北岸,从西向 ...
- 取(m堆)石子游戏 HDU2176(Nim博弈)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=2176 题目: Problem Description m堆石子,两人轮流取.只能在1堆中取.取完者胜. ...
- 【网络爬虫入门01】应用Requests和BeautifulSoup联手打造的第一条网络爬虫
[网络爬虫入门01]应用Requests和BeautifulSoup联手打造的第一条网络爬虫 广东职业技术学院 欧浩源 2017-10-14 1.引言 在数据量爆发式增长的大数据时代,网络与用户的沟 ...
- VS开发工具 因插件问题导致 已停止工作 解决办法
解决方案如下:No1. 开始-->所有程序-->Microsoft Visual Studio 2012-->Visual Studio Tools-->VS2012 开发人员 ...
- springcloud基于ribbon的canary路由方案
思路 根据eureka的metadata进行自定义元数据,然后使用ribbon对该元数据进行过滤和匹配,选择server. 实现 这里使用header来传递路由信息,改造ribbon-discover ...
- 利用procdump+Mimikatz 绕过杀软获取Windows明文密码
思路: 就是通过系统自带的procdump去下载存储用户名密码的文件(应该不能那么说这个文件,但是这样理解没问题),然后用猕猴桃读取. procdump.exe Procdump是一个轻量级的Sysi ...
- Centos 7 smb 安装使用
安装: yum install samba 添加smb用户: smbpasswd -a root /etc/samba/smb.conf 追加: [public] path = / valid use ...
- 看jquery3.3.1学js类型判断的技巧
需要预习:call , typeof, js数据类型 1. isFunction中typeof的不靠谱 源码: var isFunction = function isFunction( obj ) ...