【bzoj3343】教主的魔法 分块
【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
题解
将区间分为sqrt(n)块每块排序,
修改:对于一块直接上add标记,二两端进行暴力修改
查询:对于一块用二分查找,对于单个则暴力
代码
#include <cstdio>
#include <cmath>
#include <cstring>
#include <ctime>
#include <iostream>
#include <algorithm>
#include <set>
#include <vector>
#include <queue>
#include <typeinfo>
#include <map>
#include <stack>
typedef long long ll;
using namespace std;
inline ll read()
{
ll x=,f=;
char ch=getchar();
while(ch<''||ch>'')
{
if(ch=='-')f=-;
ch=getchar();
}
while(ch>=''&&ch<='')
{
x=x*+ch-'';
ch=getchar();
}
return x*f;
}
//***************************
int b[];
int a[];
int block;
int n,m;
int add[];
int pos[];
void reset(int x){
int l=(x-)*block+;
int r=min(n,x*block);
for(int i=l;i<=r;i++)b[i]=a[i];
sort(b+l,b+r+);
}
void update(int l,int r,int w)
{
if(pos[l]==pos[r])
{
for(int i=l;i<=r;i++)a[i]=a[i]+w;
}
else {
for(int i=l;i<=pos[l]*block;i++)a[i]=a[i]+w;
for(int i=(pos[r]-)*block+;i<=r;i++)a[i]=a[i]+w;
}
reset(pos[l]);
reset(pos[r]);
for(int i=pos[l]+;i<pos[r];i++)
add[i]=add[i]+w;
}
int ask(int l,int r,int c)
{int ans=;
if(pos[l]==pos[r])
{
for(int i=l;i<=r;i++){
if(a[i]+add[pos[i]]>=c)ans++;
}
}
else {
for(int i=l;i<=pos[l]*block;i++){
if(a[i]+add[pos[i]]>=c)ans++;
// cout<<
}
for(int i=(pos[r]-)*block+;i<=r;i++)
{
if(a[i]+add[pos[i]]>=c)ans++;
}
}
// cout<<pos[l]+1<<" "<<pos[r]-1<<" fffff "<<ans<<endl;
for(int i=pos[l]+;i<pos[r];i++)
{
int j=lower_bound(b+(i-)*block+,b+min(i*block,n)+,c-add[i])-b;//cout<<j<<" ggg ";
ans+=(min(i*block,n)-j+);
}
return ans;
}
int main()
{ int q;
memset(add,,sizeof(add));
cin>>n>>q;
block=int(sqrt(n));
for(int i=;i<=n;i++){
cin>>a[i];
pos[i]=(i-)/block+;
b[i]=a[i];
}
if(n%block)m=n/block+;
else m=n/block;
for(int i=;i<=m;i++){
reset(i);
}
// for(int i=1;i<=n;i++)cout<<b[i]<<" ";
int l,r,x,c;
char ch;
for(int i=;i<=q;i++){
getchar();
cin>>ch>>l>>r>>x;
if(ch=='M'){
update(l,r,x);
}else {
cout<<ask(l,r,x)<<endl;
}
}
return ;
}
【bzoj3343】教主的魔法 分块的更多相关文章
- BZOJ3343: 教主的魔法 分块
2016-05-28 10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...
- [bzoj3343]教主的魔法——分块
Brief description 给定一个数列,您需要支持一下两种操作: 给[l,r]同加一个数 询问[l,r]中有多少数字大于或等于v Algorithm analyse 这个题一时想不到什么有效 ...
- BZOJ-3343教主的魔法+分块(大块排序二分)
传送门:https://www.luogu.org/problemnew/show/P2801 参考:http://hzwer.com/2784.html 感觉思路无比清晰:) ps:我在洛谷A的, ...
- bzoj3343: 教主的魔法 分块 标记
修改:两边暴力重构,中间打标记.复杂度:O(n0.5) 查询:中间二分两边暴力.O(n0.5logn0.5) 总时间复杂度O(n*n0.5logn0.5) 空间复杂度是n级别的 标记不用下传因为标记不 ...
- [BZOJ3343]教主的魔法
[BZOJ3343]教主的魔法 试题描述 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.… ...
- Luogu 2801 教主的魔法 | 分块模板题
Luogu 2801 教主的魔法 | 分块模板题 我犯的错误: 有一处l打成了1,还看不出来-- 缩小块大小De完bug后忘了把块大小改回去就提交--还以为自己一定能A了-- #include < ...
- BZOJ 3343: 教主的魔法(分块+二分查找)
BZOJ 3343: 教主的魔法(分块+二分查找) 3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: ...
- 【BZOJ-3343】教主的魔法 分块
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 950 Solved: 414[Submit][Status][Discuss ...
- 【BZOJ3343】教主的魔法 分块+二分
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
随机推荐
- JavaScrip操作Cookie
//生成cookie function addCookie(sName, sValue, day) { var expireDate = new Date(); expireDate.setDate( ...
- Mongodb For C# "Query" 对象常用的方法
Query.All("name", "a", "b");//通过多个元素来匹配数组 Query.In("name", & ...
- 解决在IE中返回JSON格式的数据时提示下载的问题
如题,以ASP.NET MVC为例,解决办法如下: 控制器中: public JsonResult Test() { return Json(json, "text/html"); ...
- ios7开发学习笔记-包括c oc 和ios介绍
请查看我的新浪资料分享 http://iask.sina.com.cn/u/2430843520
- C++ 中宏的使用 --来自:http://blog.csdn.net/hgl868/article/details/7058906
宏在代码中的使用实例: g_RunLog2("Middleware client for Linux, build:%s %s", __DATE__, __TIME__); 下面详 ...
- vsftpd的安装
好像linux下的服务的配置和文件分布都差不多, 如httpd, vsftpd, named. 都是: 在/etc/???下面进行配置???.conf, 然后在/var/???放置实际要处理的文件/目 ...
- firefox访问失败的时间设置错误问题
在新装系统, 安装firefox后, 访问网页: baidu时 总是自动将http转换为https, 这个是baidu服务器的设置问题, 怪不到ff bd说,是ocsp证书错误, 然后将ocsp认证q ...
- MapReduce中TextInputFormat分片和读取分片数据源码级分析
InputFormat主要用于描述输入数据的格式(我们只分析新API,即org.apache.hadoop.mapreduce.lib.input.InputFormat),提供以下两个功能: (1) ...
- [Effective JavaScript 笔记]第28条:不要信赖函数对象的toString方法
js函数有一个非凡的特性,即将其源代码重现为字符串的能力. (function(x){ return x+1 }).toString();//"function (x){ return x+ ...
- python网络编程之最简单的单工通信
tcp_server.py from socket import * server = socket(AF_INET, SOCK_STREAM) server.bind(('',12345)) ser ...