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 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
随机推荐
- Angular(1)
1.设计原则 1.YAGNI 不要把未来需求引入当前工程 2.KISS keep it simple and stupid 语义化标记 合理注释 符合规定的命名 3.DRY(don't re ...
- java中string stringbuilder stringbuffer 的区别
1. String 类 String的值是不可变的,这就导致每次对String的操作都会生成新的String对象,不仅效率低下,而且大量浪费有限的内存空间. String a = "a&qu ...
- 【C-001】printf理解
输出整型的数值就不说了, 显示浮点型: printf("%.2f",3.33); //保留两位小数显示,数字前面没有空格填充 显示的时候,设计到0-1之间的数的时候: printf ...
- 初始化成员列表 ——— 类的const成员和引用成员的初始化
class A { public: A(){}; const int num; CString& s; } A::A() { cout<<A con<<endl; } ...
- iMac 重装系统
iMac重装系统相当简单.开机的时候按下option键选择恢复系统或者在开机前按下 command+R然后按开机键松开同样会进入系统选择界面: 当中有 4 个选项:Restore From Time ...
- Python之路【第十六篇】:Django【基础篇】
Python之路[第十六篇]:Django[基础篇] Python的WEB框架有Django.Tornado.Flask 等多种,Django相较与其他WEB框架其优势为:大而全,框架本身集成了O ...
- (转)jQuery中的extend()方法
本文转自:http://www.xiabingbao.com/jquery/2015/05/30/jquery-extend 原文的排版要比这里美观很多,建议去原文查看.本文仅仅作为个人的mark,方 ...
- angular笔记
/** * Created by Administrator on 2016/5/3 0003. */ ng-app是告诉angularjs编译器把该元素当作编译的根 //定义模块 var myApp ...
- Asp.net using Oracle.DataAccess.dll access oracle 11g 64bit & x86
使用.net访问oracle数据库时一般需要在机器上安装instantclient才能正常连接. 下面介绍一种不用安装instantclient直接引用dll就用.net能连接oracle数据库的方法 ...
- 手把手教你编写一个具有基本功能的shell(已开源)
刚接触Linux时,对shell总有种神秘感:在对shell的工作原理有所了解之后,便尝试着动手写一个shell.下面是一个从最简单的情况开始,一步步完成一个模拟的shell(我命名之为wshell) ...