题目链接:http://codeforces.com/problemset/problem/627/B

题意:有一个工厂生产零件,但是机器是不正常的,需要维修,维修时间是 k 天,在维修期间不能生产,如果是正常情况下每天可生产A个零件,不正常情况下也可以生产,但是只能生产B(B<A)件,

现有2个操作,1和2

1 x y 表示第x天分配的工作量是y;

2 x 表示假如在第x天进行维修机器,那么这n天共能生产多少个零件;

现在有q个这样的操作,问当2操作时当前的结果是多少;

由于数据范围比较大,所以不能暴力,用线段树

sum表示当前区间的所有工作量,sum1表示机器正常情况下所能生产的总工作量,sum2是不正常情况下的;

#include <iostream>
#include <cstdio>
#include <cstring>
#include <algorithm>
#include <cmath>
#include <stack>
#include <queue>
#include <map>
#include <vector>
using namespace std;
typedef long long LL;
#define PI 4*atan(1.0)
#define N 210500
#define met(a, b) memset(a, b, sizeof(a)) #define Lson r<<1
#define Rson r<<1|1 struct node
{
int L, R, sum, sum1, sum2;///sum1是好的情况下,sum2是坏的情况下;
int Mid(){ return (L+R)/; }
}a[N*]; int A, B; void Build(int r, int L, int R)
{
a[r].L = L, a[r].R = R;
a[r].sum = a[r].sum1 = a[r].sum2 = ; if(L == R)return ; Build(Lson, L, a[r].Mid());
Build(Rson, a[r].Mid()+, R);
} void Update(int r, int pos, int num)
{
if(a[r].L == a[r].R && a[r].L == pos)
{
a[r].sum += num;
if(a[r].sum >= A)
{
a[r].sum1 = A;
a[r].sum2 = B;
}
else if(a[r].sum < A && a[r].sum >= B)
{
a[r].sum1 = a[r].sum;
a[r].sum2 = B;
}
else
a[r].sum1 = a[r].sum2 = a[r].sum;
return;
}
if(pos<=a[r].Mid())
Update(Lson, pos, num);
else
Update(Rson, pos, num); a[r].sum = a[Lson].sum + a[Rson].sum;
a[r].sum1 = a[Lson].sum1 + a[Rson].sum1;
a[r].sum2 = a[Lson].sum2 + a[Rson].sum2;
} int Query(int r, int L, int R, int op)
{
if(L > R) return ; if(a[r].L == L && a[r].R == R)
{
if(op == )
return a[r].sum1;
return a[r].sum2;
}
if(R<=a[r].Mid())
return Query(Lson, L, R, op);
else if(L>a[r].Mid())
return Query(Rson, L, R, op);
else
{
int ans1 = Query(Lson, L, a[r].Mid(), op);
int ans2 = Query(Rson, a[r].Mid()+, R, op);
return ans1+ans2;
}
} int main()
{
int n, k, q, op, x, y;
while(scanf("%d %d %d %d %d", &n, &k, &A, &B, &q)!=EOF)
{
Build(, , n);
while(q--)
{
scanf("%d", &op);
if(op==)
{
scanf("%d %d", &x, &y);
Update(, x, y);
}
else
{
scanf("%d", &x); int ans1 = Query(, , x-, );///0没修好之前的;
int ans2 = Query(, x+k, n, );///1修好之后的; printf("%d\n", ans1 + ans2);
}
}
}
return ;
}

B. Factory Repairs---cf627B(线段树)的更多相关文章

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

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

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

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

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

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

    http://codeforces.com/problemset/problem/627/B 题目大意:  n代表天数 ,k代表每一次维修持续的天数,a代表维修过后每天能生产a件产品,b代表维修之前每 ...

  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下密码抓取神器mimipenguin

    前有Mimikatz,今有mimipenguin,近日国外安全研究员huntergregal发布了工具mimipenguin,一款Linux下的密码抓取神器,可以说弥补了Linux下密码抓取的空缺. ...

  2. HBase源代码分析之MemStore的flush发起时机、推断条件等详情

    前面的几篇文章.我们具体介绍了HBase中HRegion上MemStore的flsuh流程,以及HRegionServer上MemStore的flush处理流程.那么,flush究竟是在什么情况下触发 ...

  3. c++ vs 快捷方式

    强迫智能感知:Ctrl+J: 强迫智能感知显示参数信息:Ctrl-Shift-空格: Ctrl+E,D ----格式化全部代码 Ctrl+A+K+F Ctrl+E,F ----格式化选中的代码 Ctr ...

  4. easyui------修改validatebox过滤规则

    转载: http://www.cnblogs.com/zhxhdean/archive/2011/09/21/2184153.html 代码: //扩展easyui表单的验证 $.extend($.f ...

  5. 延迟是AR/VR体验的基础

    原文: http://blogs.valvesoftware.com/abrash/latency-the-sine-qua-non-of-ar-and-vr/ 译者注: 原文发表于2012年, 尽管 ...

  6. mybatis由浅入深day01_1课程安排_2对原生态jdbc程序中问题总结

    mybatis 第一天 mybatis的基础知识 1 课程安排: mybatis和springmvc通过订单商品 案例驱动 第一天:基础知识(重点,内容量多) 对原生态jdbc程序(单独使用jdbc开 ...

  7. day23<File类递归练习>

    File类递归练习(统计该文件夹大小) File类递归练习(删除该文件夹) File类递归练习(拷贝) File类递归练习(按层级打印) 递归练习(斐波那契数列) 递归练习(1000的阶乘所有零和尾部 ...

  8. 九度 1534:数组中第K小的数字(二分法变形)

    题目描述: 给定两个整型数组A和B.我们将A和B中的元素两两相加可以得到数组C.譬如A为[1,2],B为[3,4].那么由A和B中的元素两两相加得到的数组C为[4,5,5,6].现在给你数组A和B,求 ...

  9. 【RF库Collections测试】Create Dictionary

    Name:Create DictionarySource:Collections <test library>Arguments:[ *key_value_pairs ]

  10. docker学习-docker仓库

    docker仓库中心:https://hub.docker.com/ 网易蜂巢仓库中心:https://c.163.com/hub#/m/home/