bzoj千题计划154:bzoj3343: 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343
high记录原始身高
HIGH记录每块排序之后的身高
不满一块的直接对high操作,重排之后再赋值给HIGH
块内直接打标记
查询时,不满一块的直接查,一整块的在HIGH内二分块内第一个>=C-标记的点
#include<cmath>
#include<cstdio>
#include<iostream>
#include<algorithm> using namespace std; #define N 1000001 int bl[N];
int high[N],HIGH[N],tmp[N];
int L[],R[],tag[]; void read(int &x)
{
x=; char c=getchar();
while(!isdigit(c)) c=getchar();
while(isdigit(c)) { x=x*+c-''; c=getchar(); }
} void modify(int l,int r,int w)
{
if(bl[l]==bl[r])
{
for(int i=l;i<=r;++i) high[i]+=w;
for(int i=L[bl[l]];i<=R[bl[l]];++i) tmp[i]=high[i];
sort(tmp+L[bl[l]],tmp+R[bl[l]]+);
for(int i=L[bl[l]];i<=R[bl[l]];++i) HIGH[i]=tmp[i];
return;
}
for(int i=l;i<=R[bl[l]];++i) high[i]+=w;
for(int i=L[bl[l]];i<=R[bl[l]];++i) tmp[i]=high[i];
sort(tmp+L[bl[l]],tmp+R[bl[l]]+);
for(int i=L[bl[l]];i<=R[bl[l]];++i) HIGH[i]=tmp[i];
for(int i=L[bl[r]];i<=r;++i) high[i]+=w;
for(int i=L[bl[r]];i<=R[bl[r]];++i) tmp[i]=high[i];
sort(tmp+L[bl[r]],tmp+R[bl[r]]+);
for(int i=L[bl[r]];i<=R[bl[r]];++i) HIGH[i]=tmp[i];
for(int i=bl[l]+;i<bl[r];++i) tag[i]+=w;
} int find(int x,int y,int w)
{
int l=x,r=y,mid,ok=y+;
while(l<=r)
{
mid=l+r>>;
if(HIGH[mid]>=w) ok=mid,r=mid-;
else l=mid+;
}
return y-ok+;
} void ask(int l,int r,int w)
{
int ans=;
if(bl[l]==bl[r])
{
for(int i=l;i<=r;++i)
if(high[i]+tag[bl[l]]>=w) ans++;
cout<<ans<<'\n';
return;
}
for(int i=l;i<=R[bl[l]];++i)
if(high[i]+tag[bl[l]]>=w) ans++;
for(int i=L[bl[r]];i<=r;++i)
if(high[i]+tag[bl[r]]>=w) ans++;
for(int i=bl[l]+;i<bl[r];++i) ans+=find(L[i],R[i],w-tag[i]);
cout<<ans<<'\n';
} int main()
{
int n,m;
read(n);
read(m);
for(int i=;i<=n;++i)
{
read(high[i]);
HIGH[i]=high[i];
}
int siz=sqrt(n);
for(int i=;i<=n;++i) bl[i]=(i-)/siz+;
for(int i=;i<=bl[n];++i)
{
L[i]=R[i-]+;
R[i]=L[i]+siz-;
}
R[bl[n]]=n;
for(int i=;i<=bl[n];++i) sort(HIGH+L[i],HIGH+R[i]+);
char s[];
int l,r,w;
while(m--)
{
scanf("%s",s);
read(l);
read(r);
read(w);
if(s[]=='M') modify(l,r,w);
else ask(l,r,w);
}
return ;
}
bzoj千题计划154:bzoj3343: 教主的魔法的更多相关文章
- bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块
http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...
- bzoj千题计划196:bzoj4826: [Hnoi2017]影魔
http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...
- bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪
http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...
- bzoj千题计划177:bzoj1858: [Scoi2010]序列操作
http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...
- bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)
https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...
- bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)
https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...
- bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹
http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...
- bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机
http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...
- bzoj千题计划250:bzoj3670: [Noi2014]动物园
http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...
随机推荐
- 我对git的认识
Git 真的是不了解 也没听说过git 所以真的不知道从何谈起 所以就参考度娘啦! Git是一个开源的分布式版本控制系统,用以有效.高速的处理从很小到非常大的项目版本管理.Git 是 Linus To ...
- Delphi 判断TImage是否为空及注意事项
Delphi 判断TImage是否为空:1)非空 Image1.Picture.Graphic <> nil2)为空 Image1.Picture.Graphic = nil注意不能用Im ...
- wpf后台设置颜色(背景色,前景色)
有时候你是不是也会遇到要在wpf后台给某个控件设置背景色或者给文字设置前景色的情况? 本人最近看到一个从自定义的combobox读取系统字体和颜色的实例,该实例实现了随字体combobox选项改变而改 ...
- [转帖]go 命令
golang笔记——命令 https://www.cnblogs.com/tianyajuanke/p/5196436.html 1.GO命令一览 GO提供了很多命令,包括打包.格式化代码.文档生成 ...
- [知乎]老狼:深入PCI与PCIe之二:软件篇
深入PCI与PCIe之二:软件篇 https://zhuanlan.zhihu.com/p/26244141 我们前一篇文章(深入PCI与PCIe之一:硬件篇 - 知乎专栏)介绍了PCI和PCIe的硬 ...
- [转帖]HDD磁盘,非4K无以致远
https://blog.csdn.net/swingwang/article/details/54880918 机械硬盘的未来要靠高容量作为依托,在财报中,希捷表示未来18个月内它们将推出14和16 ...
- python 9*9乘法口诀表
# -*- coding: utf-8 -*- # __author__ = 'Carry' for i in range(1, 10): for j in range(1, i + 1): prin ...
- C# 源码计数器
设计背景 编程工作中,有些文档需要填写代码量,例如申请软件著作权.查阅相关资料之后,编写了这个小程序. 设计思路 主要思路为分析项目文件,根据项目文件查找代码文件,然后遍历代码文件进行分析 相关技术 ...
- Java变量初始化之后的默认值问题
1) 局部变量初始化(局部变量:函数.语句中的变量,只在所属区域内有效)局部变量声明后,Java虚拟机不会自动给它初始化为默认值.因此对于局部变量,必须经过显示的初始化,才能使用它.如果使用一个没有被 ...
- line search中的重要定理 - 梯度与方向的点积为零
转载请注明出处:http://www.codelast.com/ 对精确的line search(线搜索),有一个重要的定理: ∇f(xk+αkdk)Tdk=0 这个定理表明,当前点在dk方向上移动到 ...