洛谷 P2801 教主的魔法 题解
刚看到这道题的时候用了个树状数组优化前缀和差分的常数优化竟然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 教主的魔法 题解的更多相关文章
- 洛谷 P2801 教主的魔法 解题报告
P2801 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.--.N. ...
- 洛谷——P2801 教主的魔法(线段树or分块)
P2801 教主的魔法 (1) 若第一个字母为“M”,则紧接着有三个数字L.R.W.表示对闭区间 [L, R] 内所有英雄的身高加上W. (2) 若第一个字母为“A”,则紧接着有三个数字L.R.C.询 ...
- 洛谷P2801 教主的魔法 [分块,二分答案]
题目传送门 教主的魔法 题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. ...
- 洛谷 P2801 教主的魔法
题目描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的身高一开始都是 ...
- BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- 洛谷P2801 教主的魔法 分块
正解:分块 解题报告: 哇之前的坑还没填完就又写新博客? 不管不管,之前欠的两三篇题解大概圣诞节之前会再仔细想想然后重新写下题解趴,确实还挺难的感觉没有很好的理解呢QAQ还是太囫囵吞枣不求甚解了,这样 ...
- [洛谷P2801]教主的魔法
题目大意:有$n$个数,$q$个操作.两种操作: $M\;l\;r\;w:$把$[l,r]$所有数加上$w$ $A\;l\;r\;c:$查询$[l,r]$内大于等于$c$的元素的个数. 题解:分块,对 ...
- 洛谷P1783 海滩防御 分析+题解代码
洛谷P1783 海滩防御 分析+题解代码 题目描述: WLP同学最近迷上了一款网络联机对战游戏(终于知道为毛JOHNKRAM每天刷洛谷效率那么低了),但是他却为了这个游戏很苦恼,因为他在海边的造船厂和 ...
- P2801 教主的魔法(分块)
P2801 教主的魔法 区间加法,区间查询 显然就是分块辣 维护一个按块排好序的数组. 每次修改依然是整块打标记,零散块暴力.蓝后对零散块重新排序. 询问时整块二分,零散块暴力就好辣 注意细节挺多和边 ...
随机推荐
- Sql Service中的分页
创建存储过程如下: CREATE PROCEDURE [dbo].[sp_GetPageList] ), --表名 ) = '*', --字段名(全部字段为*) ), --排序字段(必须!支持多字段) ...
- Python天天学_03_基础三
Python_day_03 金角大王: http://www.cnblogs.com/alex3714/articles/5740985.html ------Python是一个优雅的大姐姐 学习方式 ...
- C语言写数据库(一)
/*** connect.c ***/ #include<stdio.h> #include<stdlib.h> #include"mysql.h" int ...
- ar9331修改flash大小和df、cat /proc/mtd的区别
首先感谢黄工的指导. 在openwrt固件目录下target/linux/ar71xx/image/Makefile,找到对应的机型,修改为4M,8M,16M,32M. 以oolite机型为例,如图所 ...
- Linux命令-文件管理(四)
Linux命令-文件管理 Linux slocate命令 Linux slocate命令查找文件或目录. slocate本身具有一个数据库,里面存放了系统中文件与目录的相关信息. 语法 slocate ...
- CodeForces 788B--Weird journey
Time Limit:2000MS Memory Limit:262144KB 64bit IO Format:%I64d & %I64u Description Little ...
- ServletConfig接口
ServletConfig接口 Servlet容器初始化Servlet对象时会为Servlet创建一个ServletConfig对象,在ServletConfig对象中包含了Servlet的初始化参数 ...
- vue-router中,require代替import解决vue项目首页加载时间过久的问题
vue的路由配置文件(routers.js),一般使用import引入的写法,当项目打包时路由里的所有component都会打包在一个js中,在项目刚进入首页的时候,就会加载所有的组件,所以导致首页加 ...
- akka 的集群访问方式
akka 中采用startProxy分区代理 访问 ,跟使用shardRegion 来访问的区别 这两种访问方式是不是重了呢. 而另外这是一个单例代理 private fun startUniver ...
- MongoDB中的_id和ObjectId
ObjectId是"_id"的默认类型.它设计成轻量型的,不同的机器都能用全局唯一的同种方法方便地生成它. 这是MongoDB采用ObjectId,而不是其他比较常规的做法(比如自 ...