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(线段树)的更多相关文章

  1. B. Factory Repairs---cf627B(线段树)

    题目链接:http://codeforces.com/problemset/problem/627/B 题意:有一个工厂生产零件,但是机器是不正常的,需要维修,维修时间是 k 天,在维修期间不能生产, ...

  2. codeforces 627B B. Factory Repairs(线段树)

    B. Factory Repairs time limit per test 4 seconds memory limit per test 256 megabytes input standard ...

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

  4. Codeforces 777E Hanoi Factory(线段树维护DP)

    题目链接 Hanoi Factory 很容易想到这是一个DAG模型,那么状态转移方程就出来了. 但是排序的时候有个小细节:b相同时看a的值. 因为按照惯例,堆塔的时候肯定是内半径大的在下面. 因为N有 ...

  5. Codeforces 777E(离散化+dp+树状数组或线段树维护最大值)

    E. Hanoi Factory time limit per test 1 second memory limit per test 256 megabytes input standard inp ...

  6. bzoj3932--可持久化线段树

    题目大意: 最近实验室正在为其管理的超级计算机编制一套任务管理系统,而你被安排完成其中的查询部分.超级计算机中的 任务用三元组(Si,Ei,Pi)描述,(Si,Ei,Pi)表示任务从第Si秒开始,在第 ...

  7. codevs 1082 线段树练习 3(区间维护)

    codevs 1082 线段树练习 3  时间限制: 3 s  空间限制: 128000 KB  题目等级 : 大师 Master 题目描述 Description 给你N个数,有两种操作: 1:给区 ...

  8. codevs 1576 最长上升子序列的线段树优化

    题目:codevs 1576 最长严格上升子序列 链接:http://codevs.cn/problem/1576/ 优化的地方是 1到i-1 中最大的 f[j]值,并且A[j]<A[i] .根 ...

  9. codevs 1080 线段树点修改

    先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...

随机推荐

  1. Linux scp复制文件,不需要输入密码的技巧

    当两台LINUX主机之间要互传文件时可使用SCP命令来实现,建立信任关系之后可不输入密码. 把你的本地主机用户的ssh公匙文件复制到远程主机用户的~/.ssh/authorized_keys文件中 假 ...

  2. Windows下单机安装Spark开发环境

    机器:windows 10 64位. 因Spark支持java.python等语言,所以尝试安装了两种语言环境下的spark开发环境. 1.Java下Spark开发环境搭建 1.1.jdk安装 安装o ...

  3. hibernate的延迟加载及其与session关闭的矛盾

    延迟加载就是并不是在读取的时候就把数据加载进来,而是等到使用时再加载. 那么Hibernate是怎么知道用户在什么时候使用数据了呢?又是如何加载数据呢? 其实很简单,它使用了代理机制.返回给用户的并不 ...

  4. Linux下的shell编程(一)BY 四喜三顺

    Ctrl + Alt + Tvim文本编辑器:i(插入模式),v(可视模式),Esc(普通模式),:w(保存),:r(打开),:q(退出)gvim 文本编辑器vim的升级版gedit 更常用的文本编辑 ...

  5. Android自学笔记:环境配置

    Info: 自学Android之旅第二篇,初步学习会有疏漏,以后我会不断修改补全,直到完美. 2014-10-09:初版 2014-11-12: 重新配置了一台电脑,更新在学习robotium过程中, ...

  6. maximo功能修改笔记

    经过前几次的简单的修改系统功能,对maximo的bean开发已经有了一定了解,现在是耗时近两个礼拜来修改了一项系统功能,所用到的知识 Bean Fld, 下面我认真总结修改功能过程中的学到的知识: 目 ...

  7. Scala class的构造方法与继承

    有java背景的人,很清楚java是如何定义构造方法以及继承的.在scala里面,继承和java有些相似.但是构造方法的定义,就不大一样了,应该说是差别还是很大的.在java里面,定义构造方法,就是定 ...

  8. swift 代码添加lable

    let lable1 = UILabel(frame: CGRect(x: CGFloat(self.view.bounds.width/2-20), y: CGFloat(history.frame ...

  9. R语言学习笔记-变量的作用域

    R语言是如何将变量值和变量绑定的 在r语言中,当前的 workspace就是global enviroment,当输入变量名时,首先会在global enviroment中搜索该变量,如有,则将它显示 ...

  10. strcat strcpy 使用出现的问题汇总

    事例1(转)  在程序中多次用的strcat函数,但是有时候编译通过,但是执行时却出现了错误.为了进一步了解strcat函数的使用,我首先写了这样的一个测试程序: main(){       char ...