B. Factory Repairs---cf627B(线段树)
题目链接: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(线段树)的更多相关文章
- 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有 ...
- B. Factory Repairs--cf627B(线段树)
http://codeforces.com/problemset/problem/627/B 题目大意: n代表天数 ,k代表每一次维修持续的天数,a代表维修过后每天能生产a件产品,b代表维修之前每 ...
- 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 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
随机推荐
- unity之Mathf类
说明:Mathf类主要提供数学计算的函数与常量,包含了所有数学计算时需要用到的函数.所以掌握Mathf类里面的成员变量和成员函数是必要的. 使用Mathf:通常的如果使用一个类中的成员变量或者成员函数 ...
- 怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!
怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为asp.net大神!!!!!!!!!!!!!!!!!!!怎么成为 ...
- RAC DBCA 找不到共享磁盘
(一) 前言: 通过vmware workstation 走iscsi协议.安装RAC 集群架构,DBCA 时不能识别ASM 共享存储(按理来说这一版都是权限的问题).同一时候,本想通过RMAN ...
- linux mint 19解决 输入法问题
安装搜狗后出现 You're currently running Fcitx with GUI, but fcitx-configtool couldn't be found, the package ...
- PHPCMS v9设置文章的审核功能
对于新建的站点,如果想设置会员发布的文章必须通过审核后才能发布,则需要以下几步来完成: 1.根据需要自定义管理员角色或选择已有角色. 步骤:设置->管理员设置->角色管理->权限设置 ...
- 帝国CMS7.2新增多图同时上传插件,上传多图效率更高
原来上传多图文件,需要挨个选择文件,然后再点批量上传,比较麻烦.所以帝国CMS7.2新增了多图上传插件:为采用FLASH方式实现同时选择多个图片一起上传,提高多图上传效率. 帝国CMS多图上传插件特性 ...
- Sublime Text2安装Package Control
一.安装Package Control 使用Sublime Text2首先就要安装Package Control,这样就能使用丰富的插件包了 安装方法有2种: (1)访问Package Control ...
- Python 爬虫知识点 - 淘宝商品检索结果抓包分析(续二)
一.URL分析 通过对“Python机器学习”结果抓包分析,有两个无规律的参数:_ksTS和callback.通过构建如下URL可以获得目标关键词的检索结果,如下所示: https://s.taoba ...
- Oracle 用户解锁
ALTER USER hr ACCOUNT UNLOCK ALTER USER hr IDENTIFIED BY welcome
- Emulator Error: Could not load OpenGLES emulation library: Could not load DLL!
Copy the file below from SDK\tools\lib to SDK\tools. libEGL_translator.dlllibGLES_CM_translator.dlll ...