"盛大游戏杯" M 风力观测 (线段树)

题目链接:"盛大游戏杯" M 风力观测

题意:

给你n个数,现在有m个操作。

1 L R V 给[L,R]区间全部加V.

2 X 询问X这个点 历史的绝对值最大是多少。

题解:

对于每个询问,其实我们只需要记录下在这个过程中最大的偏移量和最小的偏移量就行了。

所以直接一个线段树搞一搞就行了。

 1 #include<bits/stdc++.h>
 2 #define ls l,m,rt<<1
 3 #define rs m+1,r,rt<<1|1
 4 #define mst(a,b) memset(a,b,sizeof(a))
 5 #define F(i,a,b) for(int i=a;i<=b;++i)
 6 using namespace std;
 7
 8 const int N=1e5+7;
 9 int mx[N*4],mi[N*4],val[N*4];
10 int n,a[N],t,m;
11
12 void PD(int rt)
13 {
14     if(mx[rt]||mi[rt])
15     {
16         int tmp=val[rt<<1]+mx[rt];
17         if(tmp>0)mx[rt<<1]=max(mx[rt<<1],tmp);
18         tmp=val[rt<<1]+mi[rt];
19         if(tmp<0)mi[rt<<1]=min(mi[rt<<1],val[rt<<1]+mi[rt]);
20         tmp=val[rt<<1|1]+mx[rt];
21         if(tmp>0)mx[rt<<1|1]=max(mx[rt<<1|1],tmp);
22         tmp=val[rt<<1|1]+mi[rt];
23         if(tmp<0)mi[rt<<1|1]=min(mi[rt<<1|1],tmp);
24         val[rt<<1]+=val[rt],val[rt<<1|1]+=val[rt];
25         mx[rt]=mi[rt]=val[rt]=0;
26     }
27 }
28
29 void update(int L,int R,int v,int l=1,int r=n,int rt=1)
30 {
31     if(L<=l&&r<=R)
32     {
33         val[rt]+=v;
34         if(val[rt]>0)mx[rt]=max(mx[rt],val[rt]);
35         else mi[rt]=min(mi[rt],val[rt]);
36         return;
37     }
38     PD(rt);
39     int m=l+r>>1;
40     if(L<=m)update(L,R,v,ls);
41     if(R>m)update(L,R,v,rs);
42 }
43
44 void query(int &mmx,int &mmi,int x,int l=1,int r=n,int rt=1)
45 {
46     if(l==r){mmx=mx[rt],mmi=mi[rt];return;}
47     PD(rt);
48     int m=l+r>>1;
49     if(x<=m)query(mmx,mmi,x,ls);
50     else query(mmx,mmi,x,rs);
51 }
52
53 int main(){
54     scanf("%d",&t);
55     while(t--)
56     {
57         scanf("%d%d",&n,&m);
58         mst(mx,0),mst(mi,0),mst(val,0);
59         F(i,1,n)scanf("%d",a+i);
60         F(i,1,m)
61         {
62             int x,l,r,v;
63             scanf("%d",&x);
64             if(x==1)
65             {
66                 scanf("%d%d%d",&l,&r,&v);
67                 update(l,r,v);
68             }
69             else
70             {
71                 scanf("%d",&x);
72                 int mmx,mmi;
73                 query(mmx,mmi,x);
74                 printf("%d\n",max(abs(mmx+a[x]),abs(mmi+a[x])));
75             }
76         }
77     }
78     return 0;
79 }

时间: 2024-10-29 19:09:50

"盛大游戏杯" M 风力观测 (线段树)的相关文章

2017盛大游戏杯 零件组装(状态压缩DP之巧妙枚举子集)

题目链接:2017盛大游戏杯 零件组装 题意: 有n个零件,给你相邻关系和排斥关系,每两块零件组装起来有一个代价,问最少的代价总和是多少. 题解: 考虑状态压缩,dp[i]表示i这个集合为一个零件块. 那么要枚举一下i的子集.O(3^n). 先要预处理一下每个集合的排斥个数和相邻个数,然后容斥一下就可以了. 1 #include<bits/stdc++.h> 2 #define mst(a,b) memset(a,b,sizeof(a)) 3 #define F(i,a,b) for(int

bzoj 1171 大sz的游戏&amp; 2892 强袭作战 (线段树+单调队列+永久性flag)

大sz的游戏 Time Limit: 50 Sec  Memory Limit: 357 MBSubmit: 536  Solved: 143[Submit][Status][Discuss] Description 大sz最近在玩一个由星球大战改编的游戏.话说绝地武士当前共控制了N个星球.但是,西斯正在暗处悄悄地准备他们的复仇计划.绝地评议会也感觉到了这件事.于是,准备加派绝地武士到各星球防止西斯的突袭.一个星球受到攻击以后,会尽快通知到总基地.需要的时间越长的星球就需要越多绝地武士来防御.为

“盛大游戏杯”第15届上海大学程序设计联赛夏季赛暨上海高校金马五校赛 B

<神无月>作为盛大游戏2017年的全新原创大作,其开发团队在自研实力强大的传世工作室基础之上,还有美树本晴彦等日本一线知名画师及日本游戏音乐大师崎元仁加盟参与制作.目前正在不限号内测中,有很多玩家进入到神无月的世界中. 在神无月中,有着玩家之间切磋的排位赛,其段位主要分为五大段位,从低到高依次为:新兵.菁英.战将.统帅.王者.每个玩家只有从新兵段位慢慢努力,一点点晋级才能到达王者段位.成为一个王者是每一个玩家的追求和心愿. 假设神无月的段位系统如下: 从低到高的段位依次简记为:D.C.B.A.

蓝桥杯 - 操作格子 (线段树)

题目传送:操作格子 思路:简单线段树,单点更新,区间求和以及最值 AC代码: #include <cstdio> #include <cstring> #include <iostream> #include <algorithm> #include <cmath> #include <queue> #include <stack> #include <vector> #include <map>

【BZOJ-2892&amp;1171】强袭作战&amp;大sz的游戏 权值线段树+单调队列+标记永久化+DP

2892: 强袭作战 Time Limit: 50 Sec  Memory Limit: 512 MBSubmit: 45  Solved: 30[Submit][Status][Discuss] Description 在一个没有冬马的世界里,经历了学园祭后的春希着急着想要见到心爱的雪菜.然而在排队想见雪菜的fans太多了,春希一时半会凑不到雪菜面前. 作为高帅富,这样的问题怎么能难倒春希?春希从武也手中拿到了取自金闪闪宝库里的多啦A梦的传话筒,并且给每一个排队的fans都发了一个传话筒. 于

bzoj 1594: [Usaco2008 Jan]猜数游戏——二分+线段树

Description 为了提高自己低得可怜的智商,奶牛们设计了一个新的猜数游戏,来锻炼她们的逻辑推理能力. 游戏开始前,一头指定的奶牛会在牛棚后面摆N(1 <= N<= 1,000,000)堆干草,每堆有若干捆,并且没有哪两堆中的草一样多.所有草堆排成一条直线,从左到右依次按1..N编号,每堆中草的捆数在1..1,000,000,000之间. 然后,游戏开始.另一头参与游戏的奶牛会问那头摆干草的奶牛 Q(1 <= Q <= 25,000)个问题,问题的格式如下: 编号为Ql..Q

【BZOJ-4515】游戏 李超线段树 + 树链剖分 + 半平面交

4515: [Sdoi2016]游戏 Time Limit: 40 Sec  Memory Limit: 256 MBSubmit: 304  Solved: 129[Submit][Status][Discuss] Description Alice 和 Bob 在玩一个游戏. 游戏在一棵有 n 个点的树上进行.最初,每个点上都只有一个数字,那个数字是 123456789123456789. 有时,Alice 会选择一条从 s 到 t 的路径,在这条路径上的每一个点上都添加一个数字.对于路径上

【BZOJ4372】烁烁的游戏 动态树分治+线段树

[BZOJ4372]烁烁的游戏 Description 背景:烁烁很喜欢爬树,这吓坏了树上的皮皮鼠.题意:给定一颗n个节点的树,边权均为1,初始树上没有皮皮鼠.烁烁他每次会跳到一个节点u,把周围与他距离不超过d的节点各吸引出w只皮皮鼠.皮皮鼠会被烁烁吸引,所以会一直待在节点上不动.烁烁很好奇,在当前时刻,节点u有多少个他的好朋友---皮皮鼠.大意:给一颗n个节点的树,边权均为1,初始点权均为0,m次操作:Q x:询问x的点权.M x d w:将树上与节点x距离不超过d的节点的点权均加上w. In

拼接游戏(线段树、计算几何)

题目大意: 给出一段由N个线段首尾相接而成的绳子,其中第 i 条线段(从1开始)是由点 Pi-1 和 点 Pi 相连而成,一开始绳子从原点向y轴正方向延伸,现在要对绳子做M次修改,每次修改会把第u + 1条线段调整到第u条线段逆时针方向w度的位置,其他线段之间的关系不变,要求输出每次修改后点 PN 的坐标. 输入:第一行N,M(N,M <= 10000):第二行N个整数,表示这些线段的长度(长度为1-99之间的整数):接下来M行每行两个整数u,w(0 < u < N,0 <= w