“玲珑杯”ACM比赛 Round #21

Start Time:2017-09-23 17:00:00 End Time:2017-09-23 19:30:00 Refresh Time:2017-09-23 19:54:51 Private

C -- 战舰萝莉

Time Limit:2s Memory Limit:256MByte

Submissions:66Solved:36

DESCRIPTION

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

题解:直接线段树懒惰标记模拟即可。

#include<set>
#include<map>
#include<stack>
#include<queue>
#include<vector>
#include<string>
#include<time.h>
#include<math.h>
#include<stdio.h>
#include<iostream>
#include<string.h>
#include<stdlib.h>
#include<algorithm>
#include<functional>
using namespace std;
#define ll long long
#define inf  1000000000
#define mod 1000000007
#define maxn  136100
#define lowbit(x) (x&-x)
#define eps 1e-9
int n,k,sum[maxn*5],lazy[maxn*5],ans;
void pushdown(int id,int l,int r)
{  if(lazy[id])  {  int m=(l+r)/2;int tmp=sum[id*2];sum[id*2]+=lazy[id]*(m-l+1);if(tmp>k && sum[id*2]<=k)ans--;if(tmp<=k && sum[id*2]>k)ans++;tmp=sum[id*2+1];sum[id*2+1]+=lazy[id]*(r-m);  if(tmp>k && sum[id*2+1]<=k)ans--;if(tmp<=k && sum[id*2+1]>k)ans++;lazy[id*2]+=lazy[id];  lazy[id*2+1]+=lazy[id];  lazy[id]=0;  }
}
void build(int id,int l,int r)
{if(l==r){scanf("%d",&sum[id]);if(sum[id]>k)ans++;return;}int mid=(l+r)/2;build(id*2,l,mid);build(id*2+1,mid+1,r);sum[id]=sum[id*2]+sum[id*2+1];if(sum[id]>k)ans++;
}
void updata(int rt,int L,int R,int l,int r,int add)
{  int m;    if(L>=l && R<=r)    {   int tmp=sum[rt];sum[rt]+=add*(R-L+1);  lazy[rt]+=add;  if(tmp>k && sum[rt]<=k)ans--;if(tmp<=k && sum[rt]>k)ans++;return;    }  pushdown(rt,L,R);  m=(L+R)/2;    if(l<=m)    updata(rt*2,L,m,l,r,add);    if(r>m)   updata(rt*2+1,m+1,R,l,r,add); int tmp=sum[rt];sum[rt]=sum[rt*2]+sum[rt*2+1];   if(tmp>k && sum[rt]<=k)ans--;if(tmp<=k && sum[rt]>k)ans++;
}
int main(void)
{int i,t,x,y,z,m;scanf("%d%d%d",&n,&m,&k);build(1,1,n);for(i=1;i<=m;i++){scanf("%d%d%d%d",&t,&x,&y,&z);if(t==1){updata(1,1,n,x,y,z);printf("%d\n",ans);}else{updata(1,1,n,x,y,-z);printf("%d\n",ans);}}return 0;
}

“玲珑杯”ACM比赛 Round #21-C-战舰萝莉(线段树区间更新)相关推荐

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

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

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

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

  3. 玲珑杯”ACM比赛 Round #8-D XJT Loves Boggle(dfs)

    记录一个菜逼的成长.. DESCRIPTION Boggle is a word game designed by Allan Turoff and distributed by Hasbro. It ...

  4. “玲珑杯”ACM比赛 Round #18 C -- 图论你先敲完模板【Dp】

    C -- 图论你先敲完模板 Time Limit:5s Memory Limit:256MByte Submissions:660Solved:160 DESCRIPTION 今天HHHH在操场上跑步 ...

  5. “玲珑杯”ACM比赛 Round #18 ABC题解

    A -- 计算几何你瞎暴力 Time Limit:5s Memory Limit:256MByte Submissions:1597Solved:301 DESCRIPTION 今天HHHH考完了期末 ...

  6. 玲珑杯”ACM比赛 Round #15 D 咸鱼商店【二分+01背包】

    题目链接:http://www.ifrog.cc/acm/problem/1125 题目大意:中文题目,题意请仔细看题面. 解题思路:二分+01背包     01背包的最终结果与其中的顺序无关,我们要 ...

  7. 牛客网 2018年全国多校算法寒假训练营练习比赛(第五场) H.Tree Recovery-完全版线段树(区间更新、区间求和)...

    H.Tree Recovery 时间限制:C/C++ 1秒,其他语言2秒 空间限制:C/C++ 131072K,其他语言262144K 64bit IO Format: %lld 链接:https:/ ...

  8. CodeforcesBeta Round #19 D. Points 离线线段树 单点更新 离散化

    题目链接: http://codeforces.com/contest/19/problem/D 题意: 有三种操作"add x y"往平面上添加(x,y)这个点,"re ...

  9. lonlifeOJ1152 “玲珑杯”ACM比赛 Round #19 概率DP

    E -- Expected value of the expression DESCRIPTION You are given an expression: A0O1A1O2A2⋯OnAnA0O1A1 ...

最新文章

  1. jQuery(一)引入
  2. airtest web 录制滑块_Airtest 录屏总结,这不是一个简单的 recording!
  3. springboot里面logback使用
  4. python怎么读文件名-python如何获取当前文件夹下所有文件名详解
  5. python 编码文件json.loads json.dumps
  6. 谭浩强课后题之----判断闰年
  7. vCenter Server管理:[2]创建只读账户
  8. 【工作经验分享】这些新技术你们都知道吗
  9. 空格分隔输出(信息学奥赛一本通-T1026)
  10. OpenCV-数字图像处理之拉普拉斯算子
  11. 将一个包含有2层数据分组的表输出到EXCEL表里,并分组统计
  12. python进程池的实现原理_Python基于进程池实现多进程过程解析
  13. 学习 trajectory.txt
  14. Java 常用数据类型(总结)
  15. (小柯-java- 基础)
  16. 【2019保研经验】清华贵系、清华软院、北大叉院、中科院自动化所等
  17. python 使用微信远程控制电脑
  18. 苹果手机升级13无法开机_苹果手机无法开机的解决方法
  19. ppt演示文档如何瘦身
  20. linux应用服务排错,浅谈SELinux的配置以及排错问题

热门文章

  1. 看看国外自动化生产过程,学习学习吧!!反省反省吧!!
  2. python中一个函数只允许有一条return语句_一个函数应该只有一个return语句吗?
  3. 辉太郎看前端(xss,sql,CSRF)
  4. JS的暂时性死区问题
  5. Java学习笔记一Tomcat 8.5 的WebSocket 支持
  6. 名帖355 宋徽宗赵佶 草书《千字文》
  7. 谎言的重灾区 面试官问我有无男女朋友我该怎么回答
  8. 二叉树的遍历(七种方法)
  9. 层序创建二叉树,层序遍历二叉树
  10. 《数据结构》课程设计(赫夫曼编码/译码器)