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. java io流 创建文件、写入数据、设置输出位置

    java io流 创建文件 写入数据 改变system.out.print的输出位置 //创建文件 //写入数据 //改变system.out.print的输出位置 import java.io.*; ...

  2. asp.net 运行时,"未能映射路径"

    asp.net 站点出现:未能映射路径,解决方案之一:发现原来是iis 应用程序池中设置了.net framework 版本为4.0了,而且VS中站点的版本为2.0引起的. 解决方案是把VS 中的站点 ...

  3. pow的小事不简单

    http://acm.hdu.edu.cn/showproblem.php?pid=5878 #include<stdio.h> #include<iostream> #inc ...

  4. ImageMagick之PDF转换成图片(image)

    安装完ImageMagick之后,直接执行“magick convert f:\parseWord\tmp\testpdf.pdf f:\parseWord\tmp\testpdf.jpg”,会报错: ...

  5. c# winform TreeView NODE(节点) 重命名或获取节点修改后的值

    在程序开发过程中我们经常用到treeview,还经常要修改节点的名字.节点名字修改后还想及时更新数据库.这时问题就来了,怎样获取NODE(节点)更新后的值呢?本人试了很多方法最终分析出treeview ...

  6. knockoutJS+knockout.multimodels使用记录

    可以多次绑定,但不能嵌套绑定 错误示例: <div class="con_c" data-model="viewModel"> <div da ...

  7. htmL5 html5Validate

    http://www.zhangxinxu.com/wordpress/2012/12/jquery-html5validate-html5-form-validate-plugin/

  8. Warchall: Live RCE

    具体漏洞是:CVE-2012-1823(PHP-CGI RCE) 在地址后面加进参数运行对应的php-cgi 参数的行为 例如 index.php?-s 相参于/usr/bin/php53-cgi/p ...

  9. php 学习使用

    https://netbeans.org/kb/docs/php/wish-list-lesson1_zh_CN.html#register-mysql http://www.php100.com/h ...

  10. (十) 一起学 Unix 环境高级编程 (APUE) 之 线程控制

    . . . . . 目录 (一) 一起学 Unix 环境高级编程 (APUE) 之 标准IO (二) 一起学 Unix 环境高级编程 (APUE) 之 文件 IO (三) 一起学 Unix 环境高级编 ...