http://www.ifrog.cc/acm/problem/1164
1164 - 战舰萝莉

Time Limit:2s Memory Limit:256MByte

Submissions:85Solved:42

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 20 1 2 3 4 5 6 7 8 2 1 8 100 1 1 3 20

SAMPLE OUTPUT
1 0

HINT
1 ≤ n ,m≤ 100000,序列值,k和sumv[o]始终在int范围内,可能出现负数
A盯了一个小时后发现不会= =再看这道为什么这么水!难道第一题不是签到题- -!
代码都给出来了,xjb改一下维护一个总值k就好了,在修改函数pushdown里面维护。
 1 #include<bits/stdc++.h>
 2 using namespace std;
 3 int a[100005];
 4 int sumv[400005];
 5 int addv[400005];
 6 int ans=0,K;
 7 struct SegTree
 8 {
 9 #define lson (o<<1)
10 #define rson (o<<1|1)
11 inline void pushup(int o)
12 {
13     int tmp=sumv[lson]+sumv[rson];
14     if(sumv[o]<=K&&tmp>K) ans++;
15     if(sumv[o]>K&&tmp<=K) ans--;
16     sumv[o]=tmp;
17 }
18 inline void pushdown(int o,int l,int r){
19      if(!addv[o]) {return;}
20      int mid=(l+r)>>1,tag=addv[o];
21      addv[lson]+=tag;addv[rson]+=tag;
22      int tmp1=sumv[lson]+tag*(mid-l+1);
23      int tmp2=sumv[rson]+tag*(r-mid);
24      if(sumv[lson]<=K&&tmp1>K) ans++;
25      if(sumv[lson]>K&&tmp1<=K) ans--;
26      if(sumv[rson]<=K&&tmp2>K) ans++;
27      if(sumv[rson]>K&&tmp2<=K) ans--;
28      sumv[lson]=tmp1;
29      sumv[rson]=tmp2;
30      addv[o]=0;
31 }
32 inline void build(int o,int l,int r){
33      if(l==r){sumv[o]=a[l];if(sumv[o]>K)ans++;return;}
34      int mid=(l+r)>>1;
35      build(lson,l,mid);
36      build(rson,mid+1,r);
37      pushup(o);
38 }
39 inline void optadd(int o,int l,int r,int ql,int qr,int v){
40      if(ql<=l&&r<=qr){int tmp=v*(r-l+1);
41      if(sumv[o]<=K&&sumv[o]+tmp>K) ans++;
42      if(sumv[o]>K&&sumv[o]+tmp<=K) ans--;
43      sumv[o]+=tmp;
44      addv[o]+=v;
45      return;
46    }
47      int mid=(l+r)>>1;
48      pushdown(o,l,r);
49      if(ql<=mid)optadd(lson,l,mid,ql,qr,v);
50      if(qr>mid)optadd(rson,mid+1,r,ql,qr,v);
51      pushup(o);
52 }
53 }seg;
54 int main()
55 {
56     int N,M;
57     while(scanf("%d%d%d",&N,&M,&K)!=EOF){ans=0;
58         for(int i=1;i<=N;++i) scanf("%d",a+i);
59         memset(addv,0,sizeof(addv));
60         seg.build(1,1,N);//cout<<ans<<endl;
61         int opt,l,r,x;
62         while(M--){
63             scanf("%d%d%d%d",&opt,&l,&r,&x);
64             if(opt==2) x=-x;
65             seg.optadd(1,1,N,l,r,x);
66             printf("%d\n",ans);
67         }
68     }
69     return 0;
70 }

转载于:https://www.cnblogs.com/zzqc/p/7588621.html

ll 1164 线段树相关推荐

  1. 玲珑杯 1164 - 战舰萝莉 线段树水题

    点击打开链接 DESCRIPTION 在大战之后,法力浮·鳝AK迅速驾船驶向北海.当然他知道水之灵不可能那么容易得到,正如爱迪生曾说过:"要把BOSS打倒就要准备足够的等级."所以 ...

  2. “玲珑杯”ACM比赛 Round #21 【线段树标记】

    1164 - 战舰萝莉 DESCRIPTION 在大战之后,法力浮·鳝AK迅速驾船驶向北海.当然他知道水之灵不可能那么容易得到,正如爱迪生曾说过:"要把BOSS打倒就要准备足够的等级.&qu ...

  3. 二逼平衡树——树套树(线段树套Splay平衡树)

    题面 Bzoj3196 解析 线段树和Splay两棵树套在一起,常数直逼inf,但最终侥幸过了 思路还是比较简单, 在原数组维护一个下标线段树,再在每一个线段树节点,维护一个对应区间的权值Splay. ...

  4. 线段树——HDU - 1698

    题目含义 就是初始化一堆数为1 可以经过操作把一个区间的数都改变 并求这堆数的总大小 题目分析 有一个 #include<iostream> #include<stdio.h> ...

  5. BZOJ.1558.[JSOI2009]等差数列(线段树 差分)

    BZOJ 洛谷 首先可以把原序列\(A_i\)转化成差分序列\(B_i\)去做. 这样对于区间加一个等差数列\((l,r,a_0,d)\),就可以转化为\(B_{l-1}\)+=\(a_0\),\(B ...

  6. 【线段树分治 线性基】luoguP3733 [HAOI2017]八纵八横

    不知道为什么bzoj没有HAOI2017 题目描述 Anihc国有n个城市,这n个城市从1~n编号,1号城市为首都.城市间初始时有m条高速公路,每条高速公路都有一个非负整数的经济影响因子,每条高速公路 ...

  7. [bzoj1582][Usaco2009 Hol]Holiday Painting 节日画画_线段树

    Holiday Painting 节日画画 bzoj-1582 Usaco-2009 Hol 题目大意:给定两个n*m的01网格图.q次操作,每次将第二个网格图的子矩阵全部变成0或1,问每一次操作后两 ...

  8. codefores 786B. Legacy(最短路,线段树优化拆点,好题)

    题目链接 B. Legacy time limit per test2 seconds memory limit per test256 megabytes inputstandard input o ...

  9. 【题解】BZOJ 3065: 带插入区间K小值——替罪羊树套线段树

    题目传送门 题解 orz vfk的题解 3065: 带插入区间K小值 系列题解 一 二 三 四 惨 一开始用了一种空间常数很大的方法,每次重构的时候merge两颗线段树,然后无限RE(其实是MLE). ...

最新文章

  1. 可视化-grafana_使用influxDB数据
  2. ASP.NET 5系列教程 (四):向视图中添加服务和发布应用到公有云
  3. 浅谈Linux服务器究竟设置多大交换分区合适
  4. 【数据可视化应用】绘制极坐标(附Python代码)
  5. scala集合常用方法:foldRight
  6. python写的程序怎么打包成exe_python--- 如何将自己的程序打包成exe ?
  7. java linux 调用32位so_从linux源码看socket(tcp)的timeout
  8. 简约好看的响应式app下载页面源码
  9. mac下更新自带的PHP版本到5.6
  10. Best Efforts 1PC 跨库事务
  11. [C#源码] 微信跳一跳POST修改分数漏洞
  12. book118可预览文档下载
  13. Windows下效率必备软件
  14. ORACLE--面试知识点
  15. Android 内存剖析 – 发现潜在问题
  16. 服务器驱动器输入信号,基于GaN器件的驱动设计方案
  17. mysql rds 定时执行_如何使用脚本自动备份阿里云rds数据库
  18. 学习UI设计需要学习哪些软件?
  19. Notepad++ 7.6.4 x64安装包
  20. 1、网络七层的具体作用

热门文章

  1. Python计算圆的周长面积和球的表面积和体积
  2. 20175308 实验三《敏捷开发与XP实践》
  3. 关税全线下调,鞋服企业如何应对?
  4. python游戏开发实战:游戏按钮
  5. Linux下basename使用及代码实现
  6. makefile basename
  7. matlab范德蒙德行列式,求四元一次方程组的解这个 我自己算了很久 算不出来,好像得用范德蒙德行列式,希望能给出关键步骤,并把答案写出.怎么不能出图?...
  8. 使用 Web Services Enhancements 2.0 的基于角色的安全性
  9. 【SAP业务模式】之ICS(一):业务详述
  10. 2021-03-30学习日志