https://www.luogu.org/problemnew/show/P2801

分块

对于每一块进行排序存储在另一个数组中

二分查询

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cmath> using namespace std; #define gc getchar() const int N = 1e6 + ;
const int M = 1e3 + ; int A[N], B[N], Pos[N], Add[M];
int n, Q, cnt, block; inline int read(){
int x = , f = ; char c = gc;
while(c < '' || c > '') {if(c == '-') f = -; c = gc;}
while(c >= '' && c <= '') x = x * + c - '', c = gc;
return x * f;
} inline void Sort(int x){
int l = (x - ) * block + , r = min(n, x * block);
for(int i = l; i <= r; i ++) B[i] = A[i];
sort(B + l, B + r + );
} inline void Sec_G(int x, int y, int z){
if(Pos[x] == Pos[y]){for(int i = x; i <= y; i ++) A[i] += z; Sort(Pos[x]); return ;}
else {
for(int i = x; i <= Pos[x] * block; i ++) A[i] += z;
for(int i = (Pos[y] - ) * block + ; i <= y; i ++) A[i] += z;
Sort(Pos[x]); Sort(Pos[y]);
}
for(int i = Pos[x] + ; i < Pos[y]; i ++) Add[i] += z;
} inline int to_calc(int x, int num){
int l = (x - ) * block, r = min(x * block, n), last = r, ans;
while(l <= r){
int mid = (l + r) >> ;
if(B[mid] < num) ans = mid, l = mid + ;
else r = mid - ;
}
return last - ans + ;
} inline int Sec_A(int x, int y, int z){
int answer();
if(Pos[x] == Pos[y]){for(int i = x; i <= y; i ++) if(A[i] + Add[Pos[x]] >= z) answer ++; return answer;}
else {
for(int i = x; i <= Pos[x] * block; i ++) if(A[i] + Add[Pos[x]] >= z) answer ++;
for(int i = (Pos[y] - ) * block + ; i <= y; i ++) if(A[i] + Add[Pos[y]] >= z) answer ++;
}
for(int i = Pos[x] + ; i < Pos[y]; i ++) answer += to_calc(i, z - Add[i]);
return answer;
} int main()
{
freopen("gg.in", "r", stdin);
n = read(); Q = read();
block = sqrt(n);
for(int i = ; i <= n; i ++) A[i] = read();
for(int i = ; i <= n; i ++) Pos[i] = (i - ) / block + ;
for(int i = ; i <= n; i ++) Sort(i);
if(n % block) cnt = n / block + ;
else cnt = n / block;
while(Q --){
string s; cin >> s;
int x = read(), y = read(), z = read();
if(s[] == 'A') Sec_G(x, y, z);
else cout << Sec_A(x, y, z) << endl;
} return ;
}
/*
5 3
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
*/

[Luogu] 教主的魔法的更多相关文章

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

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

  2. luogu P2801 教主的魔法

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

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

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

  4. BZOJ3343 & 洛谷2801:教主的魔法——题解

    http://www.lydsy.com/JudgeOnline/problem.php?id=3343 https://www.luogu.org/problemnew/show/2801 题目描述 ...

  5. BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法

    http://www.lydsy.com/JudgeOnline/problem.php?id=3343  ||  https://www.luogu.org/problem/show?pid=280 ...

  6. BZOJ 3343: 教主的魔法 [分块]【学习笔记】

    3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 1172  Solved: 526[Submit][Status][Discus ...

  7. 【BZOJ-3343】教主的魔法 分块

    3343: 教主的魔法 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 950  Solved: 414[Submit][Status][Discuss ...

  8. 【BZOJ3343】教主的魔法 分块+二分

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

  9. BZOJ3343: 教主的魔法 分块

    2016-05-28  10:27:19 题目:http://www.lydsy.com/JudgeOnline/problem.php?id=3343 比较显然的分块题,分块后块内排序,维护整块的附 ...

随机推荐

  1. 解决git下载很慢的问题

    通过官网在下载git的时候发现网速只有几十K,淘宝有一个镜像的网站 可以提供下载https://npm.taobao.org/mirrors/git-for-windows/

  2. Luogu5405 CTS2019氪金手游(容斥原理+树形dp)

    考虑外向树怎么做.显然设f[i][j]为i子树中出现权值和为j的合法方案的概率,转移做树形背包即可. 如果树上只有一条反向边,显然可以先不考虑该边计算概率,再减去将整棵树看做外向树的概率.于是考虑容斥 ...

  3. bootstrap栅格系统的container和row一些关系

    container有个15px的padding,而我们设定的每个col也都有15px的padding,如果两者直接配合,那么就会产生30px的间距,导致内容和浏览器边框的距离较大,所以用row将所有的 ...

  4. flutter从入门到精通一

    Flutter 是 Google 开源的 UI 工具包,帮助开发者通过一套代码库高效构建多平台精美应用,支持移动.Web.桌面和嵌入式平台 flutter是基于dart语言开发的,我们将首先通过几章节 ...

  5. typescript 入门教程三

    类型别名 下面的代码将string类型赋值给一个别名,以后如果出现别名的地方,就好比出现类型string,同理其他类型也一样 type Name=string let gender:Name='男' ...

  6. Spring高级进阶:BeanFactoryPostProcessor

    BeanFactoryPostProcessor是实现spring容器功能扩展的重要接口,例如修改bean属性值,实现bean动态代理等.很多框架都是通过此接口实现对spring容器的扩展,例如myb ...

  7. 在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题)

    原文:在论坛中出现的比较难的sql问题:39(动态行转列 动态日期列问题) 最近,在论坛中,遇到了不少比较难的sql问题,虽然自己都能解决,但发现过几天后,就记不起来了,也忘记解决的方法了. 所以,觉 ...

  8. deploy KBA 2167993

    The default trace shows the following error: ****************************************** Unable to cr ...

  9. 从客户发送http请求到服务器返回http之间发生了什么

    由于我知识有限,可能会有模糊或者错误的地方,欢迎讨论与指正. 1.浏览器发出http请求 当用户访问一个url时,浏览器便会开始生成一个http请求. 首先获取http请求中所需要的参数,如url,c ...

  10. tcping端口检测工具使用

    大家都知道检测网络状态是,无论是服务器/客户机 最常用的就是ping命令,但ping命令只能检测ICMP协议,若对方禁止ping协议了,自然ping命令也就无法检测了,此时,我们可以通过tcping工 ...