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的子节点 那么 ...
随机推荐
- 【贪心算法】POJ-3190 区间问题
一.题目 Description Oh those picky N (1 <= N <= 50,000) cows! They are so picky that each one wil ...
- iOS- 本地文本容错搜索引擎2-->如何实现英文(英文首字母,汉语拼音)对中文的搜索?
1.前言 先闲说几句,最近北京的雾霾真是大,呛的我这攻城师都抗不住了.各位攻城师们一定要爱护好自己的身体!空气好时,少坐多动. 如果条件好的话,最好让你们BOSS搞个室内空气净化器.因为那几天一般 ...
- 学习jenv
背景 生活不只是眼前的苟且, 还有诗和远方. 上个月工作需要启动了一个小项目, 按最初的计划会用JDK8. 但当计划报上去后, 运维部门出于后续升级维护的考虑, 不允许使用已经出来4年多的JDK8了, ...
- 简单说明webbench的安装和使用
简介 运行在linux上的一个性能测试工具 官网地址:http://home.tiscali.cz/~cz210552/webbench.html 如果不能打开的话,也可以直接到网盘下载:http:/ ...
- python selenium 代码
from selenium import webdriver from selenium.common.exceptions import TimeoutException, NoSuchElemen ...
- httpstat的简单使用
httpstat 应该是一个 python 封装后的 curl 工具能够展现 一些客户端连接网站的时间消耗,最近在看tls 感觉挺有用处的 简单学习一下 1. centos7 安装python 和 p ...
- 关于2013年1月21日的DNS故障分析文章
首页 资讯 小组 资源 注册 登录 首页 最新文章 业界 开发 IT技术 设计 创业 IT职场 访谈 在国外 经典回顾 更多 > - 导航条 - 首页 最新文章 业界 - Googl ...
- vue & button & refs & click & bug
vue & button & refs & click & bug $refs.btn.click() ??? vue & refs $refs.btn.$em ...
- mappers标签引入映射器的四种方式
第一种方式:mapper标签,通过resource属性引入classpath路径的相对资源 <!-- Using classpath relative resources --> < ...
- java并发编程中CountDownLatch和CyclicBarrier的使用
在多线程程序设计中,经常会遇到一个线程等待一个或多个线程的场景,遇到这样的场景应该如何解决? 如果是一个线程等待一个线程,则可以通过await()和notify()来实现: 如果是一个线程等待多个线程 ...