Bzoj 3343: 教主的魔法 分块,二分
3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MB
Submit: 821 Solved: 364
[Submit][Status][Discuss]
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<bits/stdc++.h>
using namespace std;
#define MAXN 1000010
int N,a[MAXN],h[MAXN],pos[MAXN],add[],block;
int read()
{
int s=,fh=;char ch=getchar();
while(ch<''||ch>''){if(ch=='-')fh=-;ch=getchar();}
while(ch>=''&&ch<=''){s=s*+(ch-'');ch=getchar();}
return s*fh;
}
void cl(int k)
{
int l=(k-)*block+,r=min(k*block,N),i;
for(i=l;i<=r;i++)a[i]=h[i];
sort(a+l,a+r+);
}
void Add(int l,int r,int c)
{
int i;
if(pos[l]==pos[r])
{
for(i=l;i<=r;i++)h[i]+=c;
cl(pos[l]);
}
else
{
for(i=l;i<=pos[l]*block;i++)h[i]+=c;
for(i=(pos[r]-)*block+;i<=r;i++)h[i]+=c;
for(i=pos[l]+;i<=pos[r]-;i++)add[i]+=c;
cl(pos[l]);cl(pos[r]);
}
}
int Find(int k,int c)
{
int l=(k-)*block+,r=min(k*block,N),t=,mid;
while(l<=r)
{
mid=(l+r)/;
if(a[mid]<c)l=mid+;
else t=mid,r=mid-;
}
if(t==)return ;
return min(k*block,N)-t+;
}
int Query(int l,int r,int c)
{
int ans=,i;
if(pos[l]==pos[r])
{
for(i=l;i<=r;i++)if(h[i]+add[pos[i]]>=c)ans++;
}
else
{
for(i=l;i<=pos[l]*block;i++)if(h[i]+add[pos[i]]>=c)ans++;
for(i=(pos[r]-)*block+;i<=r;i++)if(h[i]+add[pos[i]]>=c)ans++;
for(i=pos[l]+;i<=pos[r]-;i++)ans+=Find(i,c-add[i]);
}
return ans;
}
int main()
{
int Q,i,m,L,R,W;
char fh[];
N=read();Q=read();
block=(int)sqrt(N);
for(i=;i<=N;i++)
{
h[i]=read();
pos[i]=(i-)/block+;
}
if(N==block*block)m=block;
else m=block+;
for(i=;i<=m;i++)cl(i);
for(i=;i<=Q;i++)
{
scanf("\n%s",fh);L=read();R=read();W=read();
if(fh[]=='M')Add(L,R,W);
else printf("%d\n",Query(L,R,W));
}
return ;
}
Bzoj 3343: 教主的魔法 分块,二分的更多相关文章
- 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 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
- bzoj 3343 教主的魔法 分块
修改直接对整块打标记,两边暴力. 查询需要保证每个整块有序,所以在修改时排序就好啦 #include<cstdio> #include<cstring> #include< ...
- 【BZOJ3343】教主的魔法 分块+二分
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- bzoj 3343: 教主的魔法
Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 924 Solved: 402[Submit][Status][Discuss] Descriptio ...
- BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=280 ...
- BZOJ 3343教主的魔法
Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息组每个英雄看.于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1.2.…….N. 每个人的 ...
- BZOJ 3343 教主的魔法(分块)
题意: 有一个1e6的数组,t次操作:将[l,r]内的值增加w,或者查询[l,r]内的值大于等于add的 思路: 分块,块大小为sqrt(n),每次只需要暴力头尾两块,中间的整块打标记, 对于查询查操 ...
随机推荐
- Win32 CreateWindow GdiPlus
#include "stdafx.h" #include "TestGidPlus.h" LRESULT CALLBACK WndProc(HWND, UINT ...
- MongoDB笔记(四)基本管理命令
MongoDB命令帮助系统 基本命令及实例 一基本命令 二基本DDL和DML 三启动与终止 四安全管理 五数据备份恢复与迁移管理 六远程连接管理 MongoDB是一个NoSQL数据库系统:一个数据 ...
- leetcode problem 6 ZigZag Conversion
The string "PAYPALISHIRING" is written in a zigzag pattern on a given number of rows like ...
- mysql主从 1050错误
在mysql从库上查询时出现如下错误 ...................... Last_Errno: 1050 Last_Error: Error 'Tab ...
- 开发错误日志之Unix/Linux命令未执行或无结果等且程序无错误
在Unix/Linux环境中开发时,特别要注意权限问题,否则经常找不到错误的原因,其实就是因为权限所致.
- ubuntu下virtualenv的复制
将一个用户下的virtualenv复制到另一个用户下.直接复制无法使用,source后的python依旧是系统自带的python. 原始env名:/home/llx/work/nn/nnenv.bak ...
- 浅谈.prop() 和 attr() 的区别
今天编码时遇到一个问题,通过后台查询的数据设置前端checkbox的选中状态,设置选中状态为.attr('checked','true');没有问题,但是当数据重新加载时,checkbox应清空即所有 ...
- 如何判断list中是否包含某个元素
在python中可以通过in和not in关键字来判读一个list中是否包含一个元素: str = ['s','i','m','o','n'] if 'e' in str: print("e ...
- jquery右下角返回顶部
实现的效果也就是,当有滚动条是,滚动条未动或与顶部距离小于多少像素是,返回顶部按钮处于隐身状态,当滚动条与顶部距离大于一定像素时,返回顶部按钮出现,实现点击‘返回按钮’后,从当前位置回到等不位置.要先 ...
- pdo如何防止 sql注入
我们使用传统的 mysql_connect .mysql_query方法来连接查询数据库时,如果过滤不严,就有SQL注入风险,导致网站被攻击,失去控制.虽然可以用 mysql_real_escape_ ...