两个月之前听yyr学长讲的分块,感觉是个很神奇的暴力,但到现在还是懵的一匹

#include<bits/stdc++.h>
using namespace std;
const int maxn=1e6+;
int belong[maxn];
int a[maxn];
int b[maxn];
int d[maxn];
int l[maxn];
int r[maxn];
int p[maxn];
int n,q;
int num,block;
void build()//预处理块
{
block=sqrt(n);
num=n/block;
if(n%block)
{
num++;
}
for(int i=;i<=n;i++)
{
belong[i]=(i-)/block+;
b[i]=a[i];
}
for(int i=;i<=num;i++)
{
l[i]=(i-)*block+;
r[i]=i*block;
}
r[num]=n;
for(int i=;i<=num;i++)
{
sort(b+l[i],b+r[i]+);
}
}
void update(int ll,int rr,int w)
{
if(belong[ll]==belong[rr])
{
for(int i=ll;i<=rr;i++)
{
a[i]+=w;
}
for(int i=l[belong[ll]];i<=r[belong[ll]];i++)
{
b[i]=a[i];
}
sort(b+l[belong[ll]],b+r[belong[ll]]+);
}
else
{
for(int i=ll;i<=r[belong[ll]];i++)
{
a[i]+=w;
}
for(int i=l[belong[ll]];i<=r[belong[ll]];i++)
{
b[i]=a[i];
}
sort(b+l[belong[ll]],b+r[belong[ll]]+);
for(int i=l[belong[rr]];i<=rr;i++)
{
a[i]+=w;
}
for(int i=l[belong[rr]];i<=r[belong[rr]];i++)
{
b[i]=a[i];
}
sort(b+l[belong[rr]],b+r[belong[rr]]+);
for(int i=belong[ll]+;i<=belong[rr]-;i++)
{
p[i]+=w;
}
}
}
int ask(int ll,int rr,int c)
{
int ans=;
if(belong[ll]==belong[rr])
{
for(int i=ll;i<=rr;i++)
{
if(a[i]+p[belong[i]]>=c)
{
ans++;
}
}
printf("%d\n",ans);
}
else
{
for(int i=ll;i<=r[belong[ll]];i++)
{
if(a[i]+p[belong[i]]>=c)
{
ans++;
}
}
for(int i=l[belong[rr]];i<=rr;i++)
{
if(a[i]+p[belong[i]]>=c)
{
ans++;
}
}
for(int i=belong[ll]+;i<belong[rr];i++)
{
int l1=l[i],r1=r[i],result=,mid;
while(l1<=r1)
{
mid=(l1+r1)>>;
if(b[mid]+p[i]>=c)
{
r1=mid-;
result=r[i]-mid+;
}
else
{
l1=mid+;
}
}
ans+=result;
}
printf("%d\n",ans);
}
}
int main()
{
int A,B,C;
char ch[];
scanf("%d%d",&n,&q);
for(int i=;i<=n;i++)
{
scanf("%d",&a[i]);
}
build();
while(q--)
{
scanf("%s",ch);
scanf("%d%d%d",&A,&B,&C);
if(ch[]=='A')
{
ask(A,B,C);
}
else
{
update(A,B,C);
}
}
return ;
}

P2801 教主的魔法(分块入门)的更多相关文章

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

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

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

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

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

    题目传送 长度为\(n(n\le 1000000)\)的数组,\(q(q\le 3000)\) 次操作.修改操作即将某个区间的值增加某个不大于1000的值,查询操作即查询某个区间比C大于等于的数有多少 ...

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

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

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

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

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

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

  7. Luogu 2801 教主的魔法 | 分块模板题

    Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...

  8. BZOJ 3343: 教主的魔法(分块+二分查找)

    BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1172  Solved:  ...

  9. P2801 教主的魔法 (线段树)

    题目 P2801 教主的魔法 解析 成天做水题 线段树,第一问区间加很简单 第二问可以维护一个区间最大值和一个区间最小值,若C小于等于区间最小值,就加上区间长度,若C大于区间最大值,就加0 ps:求教 ...

随机推荐

  1. Springboot 系列(十二)使用 Mybatis 集成 pagehelper 分页插件和 mapper 插件

    前言 在 Springboot 系列文章第十一篇里(使用 Mybatis(自动生成插件) 访问数据库),实验了 Springboot 结合 Mybatis 以及 Mybatis-generator 生 ...

  2. SpringBoot轻松整合ElasticSearch

    完整项目代码地址(https://github.com/fonxian/spring-elasticsearch-example/tree/master/spring-elasticsearch-ex ...

  3. socket,模拟服务器、客户端通信

    服务器代码: using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;u ...

  4. JavaScript中的typeof

    js中的 typeof 操作符返回一个字符串,表示未经计算的操作数的类型. 其中null.字符串对象.数字对象.布尔对象.日期.数组.正则返回结果都为object,可见typeof返回结果并不精确 测 ...

  5. jsp内置对象-exception对象

    1.概念:当JSP页面发生错误产生异常时,使用隐含对象exception针对该异常做出相应的处理.使用exception对象时,需要在page指令中设定:<%@page isErrorPage= ...

  6. 1.3 使命的完成者Command

    为什么要从Command说起? 因为Command才是Cesium源码中真正意义的绘制细胞.

  7. Odoo 强大的开源微信模块 oejia_wx

    详见:http://oejia.net/blog/2018/10/24/oejia_wx_v054.html oejia_wx Odoo 的微信模块,提供了对微信公众号.企业号(企业微信)及小程序的接 ...

  8. 【English】十一、一般疑问句

    一.一般疑问句定义 参考:英语语法中的一般疑问句和特殊疑问句的区别   英语一般疑问句句型结构 能用yes / no(或相当于yes / no)回答的问句. 二.一般疑问句的句子结构,三种 be动词: ...

  9. C# Dictionary 函数解析及使用方法

    要使用Dictionary集合,需要导入C#泛型命名空间 System.Collections.Generic(程序集:mscorlib)  Dictionary的描述 1.从一组键(Key)到一组值 ...

  10. C语言货架01

    教材: < C程序设计(第四版) >  谭浩强著    清华大学出版社 教材目录 第1章     程序设计和C语言 第2章     算法——程序的灵魂 第3章     最简单的C程序设计— ...