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: 教主的魔法的更多相关文章

  1. bzoj千题计划300:bzoj4823: [Cqoi2017]老C的方块

    http://www.lydsy.com/JudgeOnline/problem.php?id=4823 讨厌的形状就是四联通图 且左右各连一个方块 那么破坏所有满足条件的四联通就好了 按上图方式染色 ...

  2. bzoj千题计划196:bzoj4826: [Hnoi2017]影魔

    http://www.lydsy.com/JudgeOnline/problem.php?id=4826 吐槽一下bzoj这道题的排版是真丑... 我还是粘洛谷的题面吧... 提供p1的攻击力:i,j ...

  3. bzoj千题计划280:bzoj4592: [Shoi2015]脑洞治疗仪

    http://www.lydsy.com/JudgeOnline/problem.php?id=4592 注意操作1 先挖再补,就是补的范围可以包含挖的范围 SHOI2015 的题 略水啊(逃) #i ...

  4. bzoj千题计划177:bzoj1858: [Scoi2010]序列操作

    http://www.lydsy.com/JudgeOnline/problem.php?id=1858 2018 自己写的第1题,一遍过 ^_^ 元旦快乐 #include<cstdio> ...

  5. bzoj千题计划317:bzoj4650: [Noi2016]优秀的拆分(后缀数组+差分)

    https://www.lydsy.com/JudgeOnline/problem.php?id=4650 如果能够预处理出 suf[i] 以i结尾的形式为AA的子串个数 pre[i] 以i开头的形式 ...

  6. bzoj千题计划304:bzoj3676: [Apio2014]回文串(回文自动机)

    https://www.lydsy.com/JudgeOnline/problem.php?id=3676 回文自动机模板题 4年前的APIO如今竟沦为模板,,,╮(╯▽╰)╭,唉 #include& ...

  7. bzoj千题计划292:bzoj2244: [SDOI2011]拦截导弹

    http://www.lydsy.com/JudgeOnline/problem.php?id=2244 每枚导弹成功拦截的概率 = 包含它的最长上升子序列个数/最长上升子序列总个数 pre_len ...

  8. bzoj千题计划278:bzoj4590: [Shoi2015]自动刷题机

    http://www.lydsy.com/JudgeOnline/problem.php?id=4590 二分 这么道水题 没long long WA了两发,没判-1WA了一发,二分写错WA了一发 最 ...

  9. bzoj千题计划250:bzoj3670: [Noi2014]动物园

    http://www.lydsy.com/JudgeOnline/problem.php?id=3670 法一:KMP+st表 抽离nxt数组,构成一棵树 若nxt[i]=j,则i作为j的子节点 那么 ...

随机推荐

  1. eclipse异常关闭,而Tomcat然在运行解决方法

    1.eclipse异常关闭,而Tomcat然在运行,再启动tomcat会出现端口冲突 解决方法:打开任务管理器,找到javaw.exe,点击关闭,就可以了

  2. bata5

    目录 组员情况 组员1(组长):胡绪佩 组员2:胡青元 组员3:庄卉 组员4:家灿 组员5:恺琳 组员6:翟丹丹 组员7:何家伟 组员8:政演 组员9:黄鸿杰 组员10:刘一好 组员11:何宇恒 展示 ...

  3. android 的helloworld没跑起来 原因

    <manifest xmlns:android="http://schemas.android.com/apk/res/android" package="com. ...

  4. 07_Java基础语法_第7天(练习)_讲义

    今日内容介绍 1.循环练习 2.数组方法练习 01奇数求和练习 * A: 奇数求和练习 * a: 题目分析 * 为了记录累加和的值,我们需要定义一个存储累加和的变量 * 我们要获取到1-100范围内的 ...

  5. autoit获取ie浏览器简单操作网页(GUI小工具)

    需要稍稍熟悉一下autoti提供的语言, 我简单做了一个带GUI的小工具,实现根据IE标题点击页面内的LinkText 注意:使用时IE窗口是显示状态才可以获取到(可以在脚本中加入搜索IE句柄,将ie ...

  6. EasyUseCase 一款脑图转化 Excel 测试用例工具 (1.2 版本升级)

    EasyUseCase 本工具由本人自主开发.经过内部实践有效提升测试用例编写效率200% 覆盖率可度量.利用读取xmind软件图表转换符合国人基本需求的测试用例,让手动写Excel用例的日子过去,发 ...

  7. [转帖]sqlnet.ora常用参数

    sqlnet.ora常用参数 注﹕在修改sqlnet.ora文件之后重新启动监听﹐修改才能生效﹗﹗﹗ oracle网络设置主要包括三个文件,sqlnet.ora\ lisnter.ora\ tnsna ...

  8. HHVM 3.0 发布,执行 PHP 的虚拟机

    HHVM 详细介绍 HipHop VM(HHVM)是Facebook推出的用来执行PHP代码的虚拟机,它是一个PHP的JIT(Just-In- Time)编译器,同时具有产生快速代码和即时编译的优点. ...

  9. AlarmManager的使用

    原文地址:http://www.cnblogs.com/kross/p/3643708.html AlarmManager可以设定一个规定的时间,或者重复从某一个时间开始,等间隔的做一个操作.可以用来 ...

  10. 开发者应该掌握的Java代码优化技能

    就像鲸鱼吃虾米一样,也许吃一个两个虾米对于鲸鱼来说作用不大,但是吃的虾米多了,鲸鱼自然饱了. 代码优化一样,也许一个两个的优化,对于提升代码的运行效率意义不大,但是只要处处都能注意代码优化,总体来说对 ...