题面

刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然AC了?(这数据也太水了吧~)

本人做的第一道分块题,调试了好久好久,最后竟然没想到二分上还会出错!(一定要注意)仅此纪念;

#include <bits/stdc++.h>
#pragma GCC optimize(2)
using namespace std;
int a[1000010],b[1000010],belong[1000010]; //原来的
int lazy[1000010],l[1000010],r[1000010]; //块上的
int block,tot,n,m;
void build()
{
block=sqrt(n);
tot=n/block;
if(n%block){
++tot;
}
for(register int i=1;i<=n;i++){
b[i]=a[i];
belong[i]=(i-1)/block+1;
}
for(register int i=1;i<=tot;i++){
l[i]=(i-1)*block+1;
r[i]=i*block;
}
r[tot]=n;
for(register int i=1;i<=tot;i++){
sort(b+l[i],b+r[i]+1);
}
return;
}
void change(int x,int y,int k)
{
if(belong[x]==belong[y]){
for(register int i=x;i<=y;i++){
a[i]+=k;
}
for(register int i=l[belong[x]];i<=r[belong[x]];i++){
b[i]=a[i];
}
sort(b+l[belong[x]],b+r[belong[x]]+1);
return ;
}
for(register int i=x;i<=r[belong[x]];i++){
a[i]+=k;
}
for(register int i=l[belong[x]];i<=r[belong[x]];i++){
b[i]=a[i];
}
sort(b+l[belong[x]],b+r[belong[x]]+1);
for(register int i=l[belong[y]];i<=y;i++){
a[i]+=k;
}
for(register int i=l[belong[y]];i<=r[belong[y]];i++){
b[i]=a[i];
}
sort(b+l[belong[y]],b+r[belong[y]]+1);
for(register int i=belong[x]+1;i<=belong[y]-1;i++){
lazy[i]+=k;
}
}
int query(int x,int y,int goal)
{
int ans=0;
if(belong[x]==belong[y]){
for(register int i=x;i<=y;i++){
if(a[i]+lazy[belong[x]]>=goal) ++ans;
}
return ans;
}
for(register int i=x;i<=r[belong[x]];i++){
if(a[i]+lazy[belong[x]]>=goal) ++ans;
}
for(register int i=l[belong[y]];i<=y;i++){
if(a[i]+lazy[belong[y]]>=goal) ++ans;
}
for(register int i=belong[x]+1;i<=belong[y]-1;i++){
int L=l[i],R=r[i],mid;
while(L<R){
int mid=(L+R)/2;
if(b[mid]+lazy[i]>=goal){
R=mid;
}
else{
L=mid+1;
}
}
if(L==r[i]){
ans+=((b[L]+lazy[i])>=goal);
continue;
}
ans+=(r[i]-L+1);
}
return ans;
}
int main()
{
cin>>n>>m;
for(register int i=1;i<=n;i++) scanf("%d",&a[i]);
build();
for(register int i=1;i<=m;i++){
char type;
int x,y,k;
cin>>type>>x>>y>>k;
if(type=='M'){
change(x,y,k);
}
else{
cout<<query(x,y,k)<<endl;
}
}
}

洛谷 P2801 教主的魔法 题解的更多相关文章

  1. 洛谷 P2801 教主的魔法 解题报告

    P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...

  2. 洛谷——P2801 教主的魔法(线段树or分块)

    P2801 教主的魔法 (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表示对闭区间 [L, R] 内所有英雄的身高加上W. (2) 若第一个字母为“A”,则紧接着有三个数字L.R.C.询 ...

  3. 洛谷P2801 教主的魔法 [分块,二分答案]

    题目传送门 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. ...

  4. 洛谷 P2801 教主的魔法

    题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...

  5. BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法

    http://www.lydsy.com/JudgeOnline/problem.php?id=3343  ||  https://www.luogu.org/problem/show?pid=280 ...

  6. 洛谷P2801 教主的魔法 分块

    正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...

  7. [洛谷P2801]教主的魔法

    题目大意:有$n$个数,$q$个操作.两种操作: $M\;l\;r\;w:$把$[l,r]$所有数加上$w$ $A\;l\;r\;c:$查询$[l,r]$内大于等于$c$的元素的个数. 题解:分块,对 ...

  8. 洛谷P1783 海滩防御 分析+题解代码

    洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...

  9. P2801 教主的魔法(分块)

    P2801 教主的魔法 区间加法,区间查询 显然就是分块辣 维护一个按块排好序的数组. 每次修改依然是整块打标记,零散块暴力.蓝后对零散块重新排序. 询问时整块二分,零散块暴力就好辣 注意细节挺多和边 ...

随机推荐

  1. 10、堆叠窗口StackedWidget

    新建项目,基类选择QMainWindow,勾选ui 堆叠窗口有三个page,每个page有个label   button处,快捷菜单,转到槽,添加代码 void MainWindow::on_push ...

  2. react页面跳转

    <Button style={{backgroundColor:'#F0F2F5'}} onClick={()=>{window.location.href="https://b ...

  3. AbpUser 扩展

    AbpUser表存放的信息比较少,现扩展一下信息 1.在Core层添加UserExtend 类,继承 AbpUser<User>,写入以上各项属性字段,并添加Discriminator 字 ...

  4. Acwing:102. 最佳牛围栏(前缀和 + 二分)

    农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...

  5. Android_(服务)Vibrator振动器

    Vibrator振动器是Android给我们提供的用于机身震动的一个服务,例如当收到推送消息的时候我们可以设置震动提醒,也可以运用到游戏当中增强玩家互动性 运行截图: 程序结构 <?xml ve ...

  6. python3 set集合,以及字典,使用技巧

    #set集合,无序不可重复setjh={'ofgh','gegds','uutytr'} setjh.add('uuuuu')#添加单个元素setjh.remove('ofgh')#删掉单个元素pri ...

  7. C1:DOM 元素的尺寸和位置

    DOM元素的尺寸和位置 DOM 元素的尺寸 DOM.offsetWidth/offsetHeight: 包括内容区宽/高,padding,border,不包括margin.如果元素的box-sizei ...

  8. SQL查询时踩得一些坑

    1.左右连接: left join:LEFT JOIN返回左表的全部行和右表满足ON条件的行,如果左表的行在右表中没有匹配,那么这一行右表中对应数据用NULL代替. inner join: 内连接是最 ...

  9. var $this = $(this)

    jQuery: What’s the Difference Between $(this), $this, and this? What about $this? $this is a little ...

  10. 三步解决IDEA系列开发工具 RubyMine、IntelliJ IDEA 卡顿问题

    近日有小伙伴跟我反映说自己的开发工具很卡,有没有什么解决方案?答案是当然有啦!接下来看看怎么设置! 1.打开RubyMine,或IDEA,上边工具栏选择Help,下拉选择Edit Custom VM ...