点击打开链接

DESCRIPTION

在大战之后,法力浮·鳝AK迅速驾船驶向北海。当然他知道水之灵不可能那么容易得到,正如爱迪生曾说过:“要把BOSS打倒就要准备足够的等级。”所以鳝氪金招募了一队海盗以防战斗。
果不其然,正当鳝看见了水之灵的所在时,一大队舰娘(雾),一大队舰船突然闪现,大战一触即发。
大战前,鳝被对面的boss——北方栖姬吸引了,北方栖姬是一个可爱的小萝莉,实力却很是强劲,而鳝打算把她诱拐回家(雾),打算把她策略击破。
鳝通过提督的观察,发现北方栖姬摆出了“线段树阵形”,具体是这样的:
可以将深海栖舰的舰队看作对一个长度为n的序列建成的线段树,线段树的每个节点维护区间和,记作sumv[o]。这个值同时也是该节点的敌舰所具有的火力。同时在作战过程中,北方栖姬会不断发出区间加和区间减的指令,请注意,这些指令是以打标记的形式维护的,换而言之,某些点的sumv可能不会及时更新。
在每次敌舰队发生变化之后,鳝会问你,当前敌舰队有多少舰是“有威胁”的,我们称一艘舰是有威胁的当且仅当这艘舰的火力>k(一个给定常数)。
作为鳝船上的一名海盗,您需要回答法力浮鳝的所有询问。
下面给出敌舰队的建成,修改的具体示例代码:
http://paste.ubuntu.com/25598285/

INPUT
输入的第一行三个整数n,m,k,m表示操作次数。接下来一行n个整数,表示线段树维护的原序列。接下来m行,每行四个整数opt,l,r,x如果opt=1表示区间加,反之则是区间减。表示在[l,r]加上或者减去x
OUTPUT
共m行,每行一个整数表示每次操作后的答案。
SAMPLE INPUT
8 2 201 2 3 4 5 6 7 82 1 8 1001 1 3 20
SAMPLE OUTPUT
10
HINT
1 ≤ n ,m≤ 100000,序列值,k和sumv[o]始终在int范围内,可能出现负数
SOLUTION
“玲珑杯”ACM比赛 Round #21
这么个水题我当时没做..因为题意没懂.我以为只考虑线段树的n个叶子结点,结果并不是. 这句话:深海栖舰的舰队看作对一个长度为n的序列建成的线段树.意思是线段树产生的大约4*n的结点,全部都看成舰队,让你统计一下哪些结点大于k的有多少每次还有区间修改....且修改要lazy标记.
只要读懂这不就是裸题么,线段树区间更新水题,记录一下变换前后的值并计数,然后lazy瞎传就好
#include<bits/stdc++.h>
#define ll long long
#define N 100010
using namespace std;
ll a[N],t[N*4],laz[N*4];
int n,m,k;
int ans ;
void pushup(int d)
{   int tmp = t[d];t[d]=t[2*d]+t[2*d+1];if(t[d] > k && tmp <= k) ans++;if(t[d] <= k && tmp > k) ans--;return ;
}
void pushdown(int d,int m)
{     if(laz[d]){  laz[2*d]+=laz[d];laz[2*d+1]+=laz[d];int tmp = t[2*d];t[2*d]+=(m-m/2)*laz[d];if(tmp <= k && t[2*d] > k) ans++;if(tmp > k && t[2*d] <= k) ans--;tmp = t[2*d+1];t[2*d+1]+=(m/2)*laz[d];if(tmp <= k && t[2*d+1] > k) ans++;if(tmp > k && t[2*d+1] <= k) ans--;laz[d]=0;}return ;
}
void build(int l,int r,int d)
{    if(l==r){   t[d]=a[l];if(t[d] >= k) ans++;return ;}int mid=(l+r)/2;build(l,mid,2*d);build(mid+1,r,2*d+1);pushup(d);return ;
}void update(int l,int r,int L,int R,int c,int d)
{     if(l==L&&r==R){laz[d]+=c;int tmp = t[d];t[d]+=c*(r-l+1);if(tmp <= k && t[d] > k) ans++;if(tmp > k && t[d] <= k) ans--;return ;}pushdown(d,R-L+1);int mid=(L+R)/2;if(r<=mid)update(l,r,L,mid,c,2*d);else if(l>mid)update(l,r,mid+1,R,c,2*d+1);else {      update(l,mid,L,mid,c,2*d);update(mid+1,r,mid+1,R,c,2*d+1);}pushup(d);
}
int main()
{   while(~scanf("%d %d %d",&n,&m,&k)){ans = 0;memset(t,0,sizeof t);for(int i = 1;i <= n;++i)scanf("%d",&a[i]);build(1,n,1);int op,l,r,x;for(int i = 1;i <= m;++i){scanf("%d %d %d %d",&op,&l,&r,&x);if(op == 1){update(l,r,1,n,x,1);printf("%d\n",ans);}else{update(l,r,1,n,-x,1);printf("%d\n",ans);}}}return 0;
}

沦落到中国字也看不懂

玲珑杯 1164 - 战舰萝莉 线段树水题相关推荐

  1. [ACM_数据结构] Color the ball [线段树水题][数组开大]

    Description N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的"小飞鸽"牌电动车从气球a开始到 ...

  2. hdu1305 字典树水题

    题意:      给你一些字符串,然后问你他们中有没有一个串是另一个串的前缀. 思路:       字典树水题,(这种水题如果数据不大(这个题目不知道大不大,题目没说估计不大),hash下也行,把每个 ...

  3. 线段树模板题3:区间染色问题

    1.3线段树模板题3:区间染色问题 在DotA游戏中,帕吉的肉钩实际上是大多数英雄中最恐怖的东西.挂钩由长度相同的几个连续的金属棍组成. 现在,帕吉(Pudge)希望对挂接进行一些操作. 让我们将钩子 ...

  4. J.哭泣的阿木木(线段树模板题)

    哭泣的阿木木 Description 没啥用的背景故事: 在远古的恕瑞玛,有一个孤独而又忧郁的灵魂,阿木木.他在世间游荡,只为找到一个朋友.他遭受了一种远古的巫术诅咒,注定忍受永世的孤单,因为被他触碰 ...

  5. UVA 12086 Potentiometers(线段树裸题)

    题目链接:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&page=show_problem ...

  6. 小清的线段树25题日志01 线段树下你和我 欢乐多又多

    前言 难度大致会按排序来 就不写总结啦 嘻嘻 适合刚学线段树的人(和我一样 练手 /*if you can't see the repayWhy not just work step by stepr ...

  7. hdu1156(简单线段树 模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  8. Bzoj 4408: [Fjoi 2016]神秘数 可持久化线段树,神题

    4408: [Fjoi 2016]神秘数 Time Limit: 10 Sec  Memory Limit: 128 MB Submit: 177  Solved: 128 [Submit][Stat ...

  9. 【线段树】[LUOGU 守墓人] [LUOGU 维护序列] 线段树模板题

    题目: 题目链接:[LUOGU 守墓人] 题解: 线段树单点修改,区间修改,单点查询,区间查询,一系列线段树基本操作,模板打就好. (回头再补一个分块和树状数组的这种板子题,就是用分块和树状数组再写一 ...

最新文章

  1. linux改变工作目录命令,linux命令:cd命令,改变当前的工作目录
  2. wpf custom control
  3. OpenGL帧缓存对象(FBO:Frame Buffer Object)(转载)
  4. linux shell for while if case break continue echo test 及算术运算符 关系运算符 布尔运算符 逻辑运算符 字符串运算符 文件测试运算符
  5. Access注入偏移爆字段
  6. Java并发编程的艺术 记录(一)
  7. servlet3异步_Servlet 3的异步Servlet功能
  8. 工作404-判断浏览器函数
  9. python3生成二维码实例fromm_Python使用mqtt极简例子
  10. java amf3_Java AMF3 反序列化漏洞分析
  11. 从Spark-Shell到SparkContext的函数调用路径过程分析(源码)
  12. mysql中加入正则表达式,mysql中的正则表达式搜索
  13. linux7自动挂载怎么做,centos 7 实现自动按需挂载
  14. AZURE-百万像素定焦镜头
  15. DW怎么把模板拽进html文件中,在Dreamweaver中如何使用模板
  16. 计算机课学生评价用语,主题班会课对学生的评价用语
  17. m语言 东华his_M语言
  18. 【收藏】如何优雅的在 Python设置报警通知(邮件、短信、电脑外放声音)
  19. NBUT 1225 NEW RDSP MODE I(找规律)(快速幂)
  20. 设计师找灵感,这5个网站就够了

热门文章

  1. 深入理解漏洞之 XXE 漏洞
  2. binlog数据恢复
  3. 《源代码》:不太严谨的科学,完美的故事
  4. 博图 FB块中InOut接口的介绍
  5. Flink 基础原理与优化思路
  6. stetho调试android程序,使用stetho和chrome调试Andorid应用
  7. 【工具】分享一些强无敌的 NPM 软件包
  8. Python盒子:模块、包和程序
  9. VisualStudio相关序列号
  10. 王者竞速游戏服务器维护了,《王者荣耀》不停机更新维护