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 ...
随机推荐
- 动态规划:LIS
题目中的严格二字,表示的意思是不允许≥或者是≤的情况出现,只允许>的情况以及<的情况 经典问题是NOIP合唱队形,在这个题目中,既求了最长上升子序列,也求了最长下降子序列 其最终的结果由两 ...
- noip2012~2015刷题小记录
2012d1t1 密码 模拟题 #include<cstdio> #include<cstdlib> #include<cstring> #include<c ...
- codeforces contest 864 problemD
Ivan has an array consisting of n elements. Each of the elements is an integer from 1 to n. Recently ...
- 关于反序列化时抛出java.io.EOFException异常
https://www.cnblogs.com/ouhaitao/p/7683568.html https://blog.csdn.net/mym43210/article/details/40081 ...
- python学习笔记(三)之变量和字符串
在其他语言中,变量就是有名字的存储区,可以将值存储在变量中,也即内存中.在Python中略有不同,python并不是将值存储在变量中,更像是把名字贴在值上边.所以,有些python程序员会说pytho ...
- TOJ 1049 Jesse's problem (最短路 floyd)
描述 All one knows Jesse live in the city , but he must come to Xiasha twice in a week. The road is to ...
- 关于 zfs 命令相关介绍
三种设备:filesystem volume snapshot 1.zfs listroot@UA4300D-spa:~/hanhuakai/pro_07/git_0708# zfs listNA ...
- hdu 1232 畅通工程(并查集算法)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1232 畅通工程 Time Limit: 4000/2000 MS (Java/Others) M ...
- 双内网渗透代理之reGeorg+Proxifier
由于这个工具第一次体验感觉还不错,很稳定.因此在这记录一下reGeorg+Proxifier的配置及其使用. 下载地址 :https://github.com/sensepost/reGeorg.gi ...
- esp8266 IOT Demo 固件刷写记录
将编译好的固件按照下面地址刷写到esp8266 出现下面错误是因为刷写的设置不对,按照图上设置: load 0x40100000, len 26828, room 16 tail 12chksum 0 ...