【BZOJ3343】教主的魔法 分块+二分
Description
Input
Output
Sample Input
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
Sample Output
3
HINT
Source
#include <iostream>
#include <cstdio>
#include <cstring>
#include <cmath>
#include <algorithm>
#define N 1000010
using namespace std;
int a[N],b[N],pos[N],add[];
int n,q,m,block;
inline int min(int x,int y) {return x<y?x:y;}
inline int read()
{
char c;
int ans=;
while ((c=getchar())==' ' || c=='\n' || c=='\r');
ans=c-'';
while (isdigit(c=getchar())) ans=ans*+c-'';
return ans;
}
void make_block(int x)
{
int l=(x-)*block+,r=min(x*block,n);
for (int i=l;i<=r;i++)
b[i]=a[i];
sort(b+l,b+r+);
}
int ef_find(int p,int v)
{
int l=(p-)*block+,r1,r=min(p*block,n);
r1=r;
while (l<=r)
{
int mid=(l+r)>>;
if (b[mid]<v) l=mid+;
else r=mid-;
}
return r1-l+;
}
void updata(int l,int r,int v)
{
if (pos[l]==pos[r])
for (int i=l;i<=r;i++) a[i]+=v;
else
{
for (int i=l;i<=pos[l]*block;i++) a[i]+=v;
for (int i=(pos[r]-)*block+;i<=r;i++) a[i]+=v;
for (int i=pos[l]+;i<pos[r];i++) add[i]+=v;
}
make_block(pos[l]);make_block(pos[r]);
}
int query(int l,int r,int v)
{
int ans=;
if (pos[l]==pos[r])
{for (int i=l;i<=r;i++) if (a[i]+add[pos[i]]>=v) ans++; }
else
{
for (int i=l;i<=pos[l]*block;i++) if (a[i]+add[pos[i]]>=v) ans++;
for (int i=(pos[r]-)*block+;i<=r;i++) if (a[i]+add[pos[i]]>=v) ans++;
for (int i=pos[l]+;i<pos[r];i++)
ans+=ef_find(i,v-add[i]);
}
return ans;
}
int main()
{
n=read();q=read();
block=int(sqrt(n));
for (int i=;i<=n;i++)
{
a[i]=read();
pos[i]=(i-)/block+;
b[i]=a[i];
}
if (n%block) m=n/block+;
else m=n/block;
for (int i=;i<=m;i++)
make_block(i);
for (int i=;i<=q;i++)
{
char ch[];int l,r,x;//TM再也不把不同类型的写到一行了MDDDDD
scanf("%s",ch);
l=read();r=read();x=read();
if (ch[]=='M') updata(l,r,x);
else printf("%d\n",query(l,r,x));
}
return ;
}
[
【BZOJ3343】教主的魔法 分块+二分的更多相关文章
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- BZOJ3343: 教主的魔法 分块
2016-05-28 10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- Bzoj 3343: 教主的魔法 分块,二分
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 821 Solved: 364[Submit][Status][Discuss ...
- BZOJ-3343教主的魔法+分块(大块排序二分)
传送门:https://www.luogu.org/problemnew/show/P2801 参考:http://hzwer.com/2784.html 感觉思路无比清晰:) ps:我在洛谷A的, ...
- 「BZOJ3343」教主的魔法(分块+二分查找)
题意: 给定一个数列,您需要支持以下两种操作:给[l,r]同加一个数询问[l,r]中有多少数字大于或等于v (n<=1000000,m<=3000) 题解 块内排序二分查询修改就用个数组存 ...
- bzoj3343: 教主的魔法 分块 标记
修改:两边暴力重构,中间打标记.复杂度:O(n0.5) 查询:中间二分两边暴力.O(n0.5logn0.5) 总时间复杂度O(n*n0.5logn0.5) 空间复杂度是n级别的 标记不用下传因为标记不 ...
- [bzoj3343]教主的魔法——分块
Brief description 给定一个数列,您需要支持一下两种操作: 给[l,r]同加一个数 询问[l,r]中有多少数字大于或等于v Algorithm analyse 这个题一时想不到什么有效 ...
- [BZOJ3343]教主的魔法
[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...
随机推荐
- 浅析配置更快的Eclipse方法
很多人感觉自己的elipse启动比较慢,其实并不是因为装的插件太多或者是导入的项目有点大,而是因为参数的设置不合理导致的.可以在eclipse.ini里面添加-Xloggc:gc.log看看启动的日志 ...
- C# Func<T,TResult>
using System; namespace FuncDemo { internal class Program { private static void Main() { //类似委托功能 Fu ...
- PHP json数据格式化方法
php 的json_encode能把数组转换为json格式的字符串.字符串没有缩进,中文会转为unicode编码,例如\u975a\u4ed4.人阅读比较困难.现在这个方法在json_encode的基 ...
- PHPCMS 实现上一篇下一篇的几种方法
1第一种 <p>上一篇:{get sql = "select contentid,catid,url,titlee from phpcms_content where conte ...
- Eclipse·如何关联Git库文件和添加JUint库
Eclipse创建工程并关联到文件(SVN或Git管理的代码文件) 新建java工程,用于存放工程的一些信息,默认存放地址. 工程相关的信息是不需要提交到(SVN或Git)版本库的,所以工程存放到本地 ...
- 程序员最喜爱的12个Android应用开发框架二(转)
在上一篇程序员最喜爱的12个Android应用开发框架(一)中,我们为大家介绍了前6个Android应用开发框架,主要包括了 Xamarin.Phonegap.Corona SDK等.接下来,小编将继 ...
- Nginx日志定时切割脚本
nginx的日志文件如果你不处理,将变得越来越大,我们可以写一个nginx日志切割脚本来自动切割日志文件. 第一步就是重命名日志文件,不用担心重命名后nginx找不到日志文件而丢失日志.在你未重新打开 ...
- winform里怎样在一个按钮上实现“单击”和“双击”事件?
Button按钮是没有双击事件(DoubleClick)的. button1.DoubleClick+=new EventHandler(button1_DoubleClick);使用这种方法在双击的 ...
- 各浏览器抗uaf机制
今年中旬,微软针对旗下ie浏览器中大量出现的uaf漏洞,对ie浏览器的安全机制进行了一个大幅度的升级,其中主要体现为隔离堆及延迟释放两个机制,顿时又将uaf漏洞的利用向上提升了一个大坎, 但是类似的对 ...
- asp中 grideview 更新 无法获取值 解决办法
string str1 = ((TextBox)(GridView1.Rows[e.RowIndex].Cells[7].Controls[0])).Text.ToString().Trim(); 来 ...