B. Factory Repairs--cf627B(线段树)
http://codeforces.com/problemset/problem/627/B
题目大意: n代表天数 ,k代表每一次维修持续的天数,a代表维修过后每天能生产a件产品,b代表维修之前每天只能生产b件产品 q代表q次查询
每次查询 都会先输入一个数
1 ,第d天接到a个订单
2,从第p天开始维修 这几天(往后的k天不工作 在第p天之前每天只能生产b件产品,p+k天之后都维修过了,所以之后的每一天能生产a件产品)
刚开始一直没有读懂题目 后来上cf上看了看 呢上面有提示 然后就是线段树
我觉得我的方法比较笨 我把每一个>a || >b 的都用一个变量保存下来,我还保存了不大于a和不大于b的和
最后更新点就行了
我刚开开始写 忽略了如果他加上一个数如果大于a的话 他的和应该减去他本身的值
#include<stdio.h>
#include<stdlib.h>
#include<algorithm>
#include<math.h>
#include<string.h>
#include<iostream>
#include<queue>
#include<ctype.h>
using namespace std;
#define N 200005
#define met(a,b) memset(a,b,sizeof(b))
#define Lson r<<1|1
#define Rson r<<1
int n,k,x,y; struct node
{
int L,R,e;
long long int Lsum,Rsum,Ls,Rs;
int mid()
{
return (L+R)/;
}
}a[N*]; void BuildTree(int r,int L,int R)
{
a[r].L=L;
a[r].R=R;
a[r].e=;
a[r].Lsum=;
a[r].Rsum=;
a[r].Ls=;
a[r].Rs=;
if(L==R)
return;
BuildTree(Lson,L,a[r].mid());
BuildTree(Rson,a[r].mid()+,R);
a[r].Lsum=a[Lson].Lsum+a[Rson].Lsum;
a[r].Rsum=a[Lson].Rsum+a[Rson].Rsum;
a[r].Ls=a[Lson].Ls+a[Rson].Ls;
a[r].Rs=a[Lson].Rs+a[Rson].Rs;
} void Update(int r,int L,int v)
{
if(a[r].L==a[r].R && a[r].L==L)
{
int kk=a[r].e;
a[r].e+=v;
if(a[r].e>=y && kk<y)
{
a[r].Lsum++;
a[r].Ls-=kk;
}
if(a[r].e>=x && kk<x)
{
a[r].Rs-=kk;
a[r].Rsum++;
}
if(a[r].e<y)
a[r].Ls=a[r].e;
if(a[r].e<x)
a[r].Rs=a[r].e;
return;
}
if(L>a[r].mid())
Update(Rson,L,v);
else
Update(Lson,L,v);
a[r].Lsum=a[Lson].Lsum+a[Rson].Lsum;
a[r].Rsum=a[Lson].Rsum+a[Rson].Rsum;
a[r].Ls=a[Lson].Ls+a[Rson].Ls;
a[r].Rs=a[Lson].Rs+a[Rson].Rs;
} long long int Qurry(int r,int L,int R,int b)
{
if(L>R)
return ;
if(a[r].L==L && a[r].R==R)
{
if(b==)
return a[r].Lsum*y+a[r].Ls;
else if(b==)
return a[r].Rsum*x+a[r].Rs;
} if(L>a[r].mid())
return Qurry(Rson,L,R,b);
else if(R<=a[r].mid())
return Qurry(Lson,L,R,b);
else
{
long long a1=Qurry(Lson,L,a[r].mid(),b);
long long a2=Qurry(Rson,a[r].mid()+,R,b);
return a1+a2;
}
} int main()
{
int q;
while(scanf("%d",&n)!=EOF)
{
met(a,);
int u,v;
BuildTree(,,n);
scanf("%d %d %d %d",&k,&x,&y,&q);
while(q--)
{
int kk;
scanf("%d",&kk);
if(kk==)
{
scanf("%d %d",&u,&v);
Update(,u,v);
}
else
{
scanf("%d",&u);
long long int sum1=Qurry(,,u-,);
long long int sum2=Qurry(,u+k,n,);
printf("%lld\n",sum1+sum2);
}
}
}
return ;
}
B. Factory Repairs--cf627B(线段树)的更多相关文章
- B. Factory Repairs---cf627B(线段树)
题目链接:http://codeforces.com/problemset/problem/627/B 题意:有一个工厂生产零件,但是机器是不正常的,需要维修,维修时间是 k 天,在维修期间不能生产, ...
- codeforces 627B B. Factory Repairs(线段树)
B. Factory Repairs time limit per test 4 seconds memory limit per test 256 megabytes input standard ...
- 8VC Venture Cup 2016 - Final Round (Div. 2 Edition) D. Factory Repairs 树状数组
D. Factory Repairs 题目连接: http://www.codeforces.com/contest/635/problem/D Description A factory produ ...
- Codeforces 777E Hanoi Factory(线段树维护DP)
题目链接 Hanoi Factory 很容易想到这是一个DAG模型,那么状态转移方程就出来了. 但是排序的时候有个小细节:b相同时看a的值. 因为按照惯例,堆塔的时候肯定是内半径大的在下面. 因为N有 ...
- Codeforces 777E(离散化+dp+树状数组或线段树维护最大值)
E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...
- bzoj3932--可持久化线段树
题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...
- codevs 1082 线段树练习 3(区间维护)
codevs 1082 线段树练习 3 时间限制: 3 s 空间限制: 128000 KB 题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...
- codevs 1576 最长上升子序列的线段树优化
题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...
- codevs 1080 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
随机推荐
- (gridcontrol等)通用导出excel z
关于DevExpress Winform 的所有可打印控件的导出excel 的通用方法,并且解决DevExpress控件自带的方法存在的缺陷问题 1.解决GridControl自带方法不能导出图片: ...
- haproxy+keepalived实现高可用负载均衡
软件负载均衡一般通过两种方式来实现:基于操作系统的软负载实现和基于第三方应用的软负载实现.LVS就是基于Linux操作系统实现的一种软负载,HAProxy就是开源的并且基于第三应用实现的软负载. HA ...
- Linux进程启动过程简析
朱宇轲 + 原创作品转载请注明出处 + <Linux内核分析>MOOC课程http://mooc.study.163.com/course/USTC-1000029000 今天,我们将通过 ...
- php实例源码之获取mysql表中所有行和列
本文章向大家介绍php获取mysql表中所有行和列的源码,主要使用到mysql_num_rows和mysql_fetch_row等php的数据库操作函数,该实例有助于大家熟悉PHP mysql数据库编 ...
- alarm rtc
http://sharp2wing.iteye.com/blog/1329518 http://blog.csdn.net/sking002007/article/details/6593809 io ...
- JavaScript笔记杂谈篇(啥都有)
二维码缩放比例以43PX的倍数缩放最为标准. NuGet相关管理http://www.cnblogs.com/dudu/archive/2011/07/15/nuget.html 学习笔记: http ...
- service对象
Service 对象 提供用于创建服务程序的一组工具 语法 Shell.Service[.property|method] 属性 Description 服务描述,仅限于 Windows 2000 及 ...
- NDK 的开发流程
1.NDK开发所需要的工具 windows 需要在windows下的环境 把c代码打包成 手机能用的函数库 首先模拟手机的环境 1 NDK .sh linux 批处理文件 .bat windows 头 ...
- TCP协议总结--停止等待协议,连续ARQ协议,滑动窗口协议
前言:在学习tcp三次握手的过程之中,由于一直无法解释tcpdump命令抓的包中seq和ack的含义,就将tcp协议往深入的了解了一下,了解到了几个协议,做一个小结. 先来看看我的问题: 这是用tcp ...
- 第五百七十八、九天 how can I 坚持
这样下去不行啊 ,昨天晚上回来捣鼓了一晚上手机,看个视频还经常开小差,得全力以赴了,不能抱着打酱油的心态了,加油. 今天和yj聊了聊,好多事啊,不能一心工作了,还得考虑结婚,也是醉了. 努力吧,先把考 ...