线段树,延迟标记。

记录一下每个节点代表的区间的最小值,以及左右端点是否为最小值,记录区间被下压几次作为延迟标记,再记录一下这个区间中有多少个最小值的连通块。

$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的更多相关文章

  1. zoj 3805 Machine

    Machine Time Limit: 2 Seconds      Memory Limit: 65536 KB In a typical assembly line, machines are c ...

  2. ZOJ 1364 Machine Schedule(二分图最大匹配)

    题意 机器调度问题 有两个机器A,B A有n种工作模式0...n-1 B有m种工作模式0...m-1 然后又k个任务要做 每一个任务能够用A机器的模式i或b机器的模式j来完毕 机器開始都处于模式0 每 ...

  3. ZOJ 3805 Machine(二叉树,递归)

    题意:一颗二叉树,求  “  宽度  ” 思路:递归,貌似这个思路是对的,先记下,但是提交时超时, 1.如果当前节点只有左孩子,那么当前宽度等于左孩子宽度 2.如果当前节点只有右孩子,那么当前宽度等于 ...

  4. zoj 3325 Machine(线段树)

    题意:0~n-1的数组,初始值为0:执行m个操作,每次操作执行后输出当前值为0的连续段的段数. 操作1: p i j : i~j区间的每个元素值减1 操作2: r i j :i~j区间的每个元素值加1 ...

  5. ZOJ Monthly, March 2018 题解

    [题目链接] A. ZOJ 4004 - Easy Number Game 首先肯定是选择值最小的 $2*m$ 进行操作,这些数在操作的时候每次取一个最大的和最小的相乘是最优的. #include & ...

  6. ACM数据结构相关资料整理【未完成,待补充】

    在网上总是查不到很系统的练ACM需要学习的数据结构资料,于是参考看过的东西,自己整理了一份. 能力有限,欢迎大家指正补充. 分类主要参考<算法竞赛入门经典训练指南>(刘汝佳),山东大学数据 ...

  7. 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 ...

  8. ZOJ 3407 Doraemon's Cake Machine [数学]

    题意: 最多有2000组测试样例,每组样例代表n,m; n代表要把蛋糕平分的份数,m代表必须进行多少次操作. 一共有三种操作 1.竖切   经过蛋糕圆心,将蛋糕整个向下切. 2.横切   平行于蛋糕平 ...

  9. zoj 1366 Cash Machine

    01背包加变形 动态规划的时候就犯浑了,每个状态都要记录的,我却只记录了当前状态的!! #include<stdio.h> #include<string.h> int max ...

随机推荐

  1. j2ee 项目部署指引

    j2ee相关的项目一般是web工程或java application,部署到linux服务器上,本文结合自己的经验.教训,总结下部署的过程. 一.准备阶段 部署前要做的事情: 1.明确自己的产品都包含 ...

  2. 【Android】完善Android学习(三:API 3.0)

    备注:之前Android入门学习的书籍使用的是杨丰盛的<Android应用开发揭秘>,这本书是基于Android 2.2API的,目前Android已经到4.4了,更新了很多的API,也增 ...

  3. codechef September Challenge 2017 Fill The Matrix

    这道题我们发现0就代表相同1代表少1或者大1 那么我们根据题目连边 如果存在1(边权只为或0)个数为奇数的环就是无解 #include<cstdio> #include<cstrin ...

  4. centos6.5下安装svn并且实现多项目管理配置方案

    #安装SVN服务器 yum install subversion #在home下创建svn根目录 mkdir /home/svn #在 /home/svn下创建pro1 , pro2, pro3 三个 ...

  5. 高精度模板_C++

    高精度压位,压9位 read:读入 write:输出 copy:赋值 change:交换 empty:清0 cmp:比较大小,相当于小于号 plus:加法 dec:减法 multy:乘法 除法实在不会 ...

  6. python调参神器hyperopt

    一.安装 pip install hyperopt 二.说明 Hyperopt提供了一个优化接口,这个接口接受一个评估函数和参数空间,能计算出参数空间内的一个点的损失函数值.用户还要指定空间内参数的分 ...

  7. Perl6 Bailador框架(2):路径设置

    use v6; use Bailador; =begin pod get表示是get发送 post表示是post发送 get/post 后面的 '/name' 表示是路径 => sub {} 是 ...

  8. 天气api接口

    python调用天气api接口: http://www.sojson.com/open/api/weather/json.shtml?city=北京 http://www.sojson.com/blo ...

  9. git - 开发者电脑与服务器的配置

    首先公司要有一台git服务器,现在一般都托管在github服务器上,在中国可能会托管到oschina上,oschina有一点好处就是可以免费托管私有项目,而在github上想要托管自己的项目是收费的, ...

  10. C基础入门 - 第一章 - C语言绪言

    第1章 C语言绪言 1.1 C语言概述 1.1.1 C语言世界 1.1.2 C语言学习, 能当饭吃吗 1.2 开发环境构建 1.2.1 visual studio安装使用 1.2.2 visual s ...