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 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
随机推荐
- NGUI之UIPanel
原文:http://www.tasharen.com/forum/index.php?topic=6705.0 概述 UIPanel用来收集和管理它下面所有widget的组件.通过widget的geo ...
- Js_Ajax_输入词提示
输入"1",有提示,否则没有 suggest.jsp #suggest { background-color: #e0e0e0; width: 200px; } var xhr; ...
- C语言初始化——bss段初始化、跃入C、C与汇编
1.bss段初始化 变量 存放位置 初始化的全局变量 数据段 局部变量 栈 malloc函数分配的 堆 未初始的全局变量 bss段 说明:全局变量在未赋初值时,会被保留到bss段. 测试: #incl ...
- linux 查找目录或文件
查找目录:find /(查找范围) -name '查找关键字' -type d查找文件:find /(查找范围) -name 查找关键字 ·find path -option [ -print ] [ ...
- Mysql函数instr、locate、position VS like
Mysql 大家都会用这样的語法: SELECT `column` FROM `table` where `condition` like `%keyword%’ 事实上,可以使用 locate 和 ...
- Fliwer:监控植物状态 实现远程浇水
Fliwer是一款针对植物而研发出来的设备,可以监控土壤水分.光照.温度.空气湿度和肥料是否充足这些指标.结合云端的植物数据和天气预报,它能够自动决定什么时候给植物浇水,甚至提醒你什么时候应该施肥.修 ...
- Loadrunner:LR提交JSON格式的POST请求
场景: 影视分发:影院客户端向管理平台发起取任务的操作,取任务接口getDispatchTask,为JSON格式的POST请求 Action() { web_custom_request(" ...
- PIC32MZ tutorial -- Output Compare
Output Compare is a powerful feature of embedded world. The PIC32 Output Compare module compares the ...
- 开发《基于Arcgis Online的家政管理服务信息系统》随笔1
1.在webservice中写的方法参数里面含有数组,如:public DataTable AdvSearch1(int ServiceArea, params string[] nas), 在发布之 ...
- C#占位符和格式化字符串
static void Main() { string c=Console.ReadLine(); string d=Console.ReadLine(); Console.WriteLine(c+& ...