玲珑杯 1164 - 战舰萝莉 线段树水题
2017-09-26 00:50
239 查看
点击打开链接
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瞎传就好
沦落到中国字也看不懂
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 ,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; }
沦落到中国字也看不懂
相关文章推荐
- “玲珑杯”ACM比赛 Round #21-C-战舰萝莉(线段树区间更新)
- 玲珑杯 1117 - RE:从零开始的异世界生活(线段树)
- POJ 2828 线段树 水题
- HDU 1754 I Hate It(线段树-水题,模板题)
- codeforces 339C Xenia and Bit Operations(线段树水题)
- 线段树 水题----今天先写点初学者的基础
- 玲珑杯#3 G 1043 - G. Quailty and Square Counter【线段树-卡常数】
- 玲珑杯 1117 - RE:从零开始的异世界生活(线段树)
- BZOJ 1012 JSOI 2008 最大数 maxnumber 线段树水题
- 玲珑杯 H -- Variance(线段树)
- “玲珑杯”线上赛 Round #15 河南专场 H -- 喵哈哈村的战斗魔法师丶坏坏い月 分块/线段树
- 玲珑杯 1117 - RE:从零开始的异世界生活(线段树)
- 1786 数据流中的算法 - 众数 STL/ 线段树 水题
- codevs 1690 开关灯 线段树水题
- 战舰萝莉
- 水题笔记:codevs 1080 线段树练习 [重口味线段树初次(单点修改)]
- 【bzoj3524】【Poi2014】【Couriers】可持久化线段树(主席树)水题
- HDU 2795 Billboard(线段树-水题,模板题)
- hdu 1164 Eddy's research I【快速打印素数表】【水题】
- poj 1164 The Castle dp区域计数水题