ll 1164 线段树
Time Limit:2s Memory Limit:256MByte
Submissions:85Solved:42
在大战之后,法力浮·鳝AK迅速驾船驶向北海。当然他知道水之灵不可能那么容易得到,正如爱迪生曾说过:“要把BOSS打倒就要准备足够的等级。”所以鳝氪金招募了一队海盗以防战斗。
果不其然,正当鳝看见了水之灵的所在时,一大队舰娘(雾),一大队舰船突然闪现,大战一触即发。
大战前,鳝被对面的boss——北方栖姬吸引了,北方栖姬是一个可爱的小萝莉,实力却很是强劲,而鳝打算把她诱拐回家(雾),打算把她策略击破。
鳝通过提督的观察,发现北方栖姬摆出了“线段树阵形”,具体是这样的:
可以将深海栖舰的舰队看作对一个长度为n的序列建成的线段树,线段树的每个节点维护区间和,记作sumv[o]。这个值同时也是该节点的敌舰所具有的火力。同时在作战过程中,北方栖姬会不断发出区间加和区间减的指令,请注意,这些指令是以打标记的形式维护的,换而言之,某些点的sumv可能不会及时更新。
在每次敌舰队发生变化之后,鳝会问你,当前敌舰队有多少舰是“有威胁”的,我们称一艘舰是有威胁的当且仅当这艘舰的火力>k(一个给定常数)。
作为鳝船上的一名海盗,您需要回答法力浮鳝的所有询问。
下面给出敌舰队的建成,修改的具体示例代码:
http://paste.ubuntu.com/25598285/
接下来一行n个整数,表示线段树维护的原序列。
接下来m行,每行四个整数opt,l,r,x
如果opt=1表示区间加,反之则是区间减。表示在[l,r]加上或者减去x
1 2 3 4 5 6 7 8
2 1 8 100
1 1 3 20
0
#include<bits/stdc++.h>
using namespace std;
int a[];
int sumv[];
int addv[];
int ans=,K;
struct SegTree
{
#define lson (o<<1)
#define rson (o<<1|1)
inline void pushup(int o)
{
int tmp=sumv[lson]+sumv[rson];
if(sumv[o]<=K&&tmp>K) ans++;
if(sumv[o]>K&&tmp<=K) ans--;
sumv[o]=tmp;
}
inline void pushdown(int o,int l,int r){
if(!addv[o]) {return;}
int mid=(l+r)>>,tag=addv[o];
addv[lson]+=tag;addv[rson]+=tag;
int tmp1=sumv[lson]+tag*(mid-l+);
int tmp2=sumv[rson]+tag*(r-mid);
if(sumv[lson]<=K&&tmp1>K) ans++;
if(sumv[lson]>K&&tmp1<=K) ans--;
if(sumv[rson]<=K&&tmp2>K) ans++;
if(sumv[rson]>K&&tmp2<=K) ans--;
sumv[lson]=tmp1;
sumv[rson]=tmp2;
addv[o]=;
}
inline void build(int o,int l,int r){
if(l==r){sumv[o]=a[l];if(sumv[o]>K)ans++;return;}
int mid=(l+r)>>;
build(lson,l,mid);
build(rson,mid+,r);
pushup(o);
}
inline void optadd(int o,int l,int r,int ql,int qr,int v){
if(ql<=l&&r<=qr){int tmp=v*(r-l+);
if(sumv[o]<=K&&sumv[o]+tmp>K) ans++;
if(sumv[o]>K&&sumv[o]+tmp<=K) ans--;
sumv[o]+=tmp;
addv[o]+=v;
return;
}
int mid=(l+r)>>;
pushdown(o,l,r);
if(ql<=mid)optadd(lson,l,mid,ql,qr,v);
if(qr>mid)optadd(rson,mid+,r,ql,qr,v);
pushup(o);
}
}seg;
int main()
{
int N,M;
while(scanf("%d%d%d",&N,&M,&K)!=EOF){ans=;
for(int i=;i<=N;++i) scanf("%d",a+i);
memset(addv,,sizeof(addv));
seg.build(,,N);//cout<<ans<<endl;
int opt,l,r,x;
while(M--){
scanf("%d%d%d%d",&opt,&l,&r,&x);
if(opt==) x=-x;
seg.optadd(,,N,l,r,x);
printf("%d\n",ans);
}
}
return ;
}
ll 1164 线段树的更多相关文章
- 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 线段树点修改
先来介绍一下线段树. 线段树是一个把线段,或者说一个区间储存在二叉树中.如图所示的就是一棵线段树,它维护一个区间的和. 蓝色数字的是线段树的节点在数组中的位置,它表示的区间已经在图上标出,它的值就是这 ...
- codevs 1082 线段树区间求和
codevs 1082 线段树练习3 链接:http://codevs.cn/problem/1082/ sumv是维护求和的线段树,addv是标记这歌节点所在区间还需要加上的值. 我的线段树写法在运 ...
- PYOJ 44. 【HNSDFZ2016 #6】可持久化线段树
#44. [HNSDFZ2016 #6]可持久化线段树 统计 描述 提交 自定义测试 题目描述 现有一序列 AA.您需要写一棵可持久化线段树,以实现如下操作: A v p x:对于版本v的序列,给 A ...
- CF719E(线段树+矩阵快速幂)
题意:给你一个数列a,a[i]表示斐波那契数列的下标为a[i],求区间对应斐波那契数列数字的和,还要求能够维护对区间内所有下标加d的操作 分析:线段树 线段树的每个节点表示(f[i],f[i-1])这 ...
- 【BZOJ-3779】重组病毒 LinkCutTree + 线段树 + DFS序
3779: 重组病毒 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 224 Solved: 95[Submit][Status][Discuss] ...
- 【BZOJ-3673&3674】可持久化并查集 可持久化线段树 + 并查集
3673: 可持久化并查集 by zky Time Limit: 5 Sec Memory Limit: 128 MBSubmit: 1878 Solved: 846[Submit][Status ...
随机推荐
- mapdb与Redis区别:
Redis也能完全相同的工作,但必竟其独立于JVM之外通过Socket交互,能达到10万次/秒就很不了不起了 mapdb可直接嵌入到JVM运行空间,运行效率是Redis没法比的,单线程能达到 30万次 ...
- 前端基础之css样式(选择器)
一.css概述 CSS是Cascading Style Sheets的简称,中文称为层叠样式表,对html标签的渲染和布局 CSS 规则由两个主要的部分构成:选择器,以及一条或多条声明. 例如 二.c ...
- oracle 函数 截取 连接 替换 判断
一个处理不规范日期的函数,廖记一下吧,以免再忘. --注意全角半角 CREATE OR REPLACE function f_str2form( date_string in varchar2 ) r ...
- requirejs源码分析: requirejs 方法–2. context.require(deps, callback, errback);
上一篇 requirejs源码分析: requirejs 方法–1. 主入口 中的return context.require(deps, callback, errback); 调用的是make ...
- jelly
http://pwnny.cn/original/2016/06/26/MakeBlog.html#NativeBuild01 Jekyll和Github搭建个人静态博客
- 如何安装/更新ruby,安装cocoapods,为开发做好准备!(2016年12月07日更新内容)
一:首先来说一下如何安装/更新ruby: 一般情况下,即使是新买的Mac电脑也会安装有ruby,可以在终端中键入一下命令查看ruby版本 ruby -v 正常情况下下面会打印出ruby的版本信息,如果 ...
- 027_编写MapReduce的模板类Mapper、Reducer和Driver
模板类编写好后写MapReduce程序,的模板类编写好以后只需要改参数就行了,代码如下: package org.dragon.hadoop.mr.module; import java.io.IOE ...
- springboot-FilterRegistrationBean
主要用来对servlet filter进行自定义,比如设置order. 先写一个普通的filter: public class FilterDemo implements Filter { priva ...
- 快乐学习 Ionic Framework+PhoneGap 手册1-1{创建APP项目}
快乐学习 Ionic Framework+PhoneGap 手册1-1 * 前提必须安装 Node.js,安装PhoneGap,搭建Android开发环境,建议使用真机调试 {1.1}= 创建APP项 ...
- QT中文乱码处理
在程序中直接使用中文,需要在程序中加入以下代码: #include <QTextCodec> int main(int argc, char **argv) { QApplication ...