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

题目描述

教主最近学会了一种神奇的魔法,能够使人长高。于是他准备演示给XMYZ信息组每个英雄看。于是N个英雄们又一次聚集在了一起,这次他们排成了一列,被编号为1、2、……、N
每个人的身高一开始都是不超过1000的正整数。教主的魔法每次可以把闭区间[LR](1≤LRN)内的英雄的身高全部加上一个整数W。(虽然L=R时并不符合区间的书写规范,但我们可以认为是单独增加第LR)个英雄的身高)
CYZ、光哥和ZJQ等人不信教主的邪,于是他们有时候会问WD闭区间 [LR] 内有多少英雄身高大于等于C,以验证教主的魔法是否真的有效。
WD巨懒,于是他把这个回答的任务交给了你。

输入

第1行为两个整数NQQ为问题数与教主的施法数总和。
第2行有N个正整数,第i个数代表第i个英雄的身高。
第3到第Q+2行每行有一个操作:
(1)       若第一个字母为“M”,则紧接着有三个数字LRW。表示对闭区间 [LR] 内所有英雄的身高加上W
(2)       若第一个字母为“A”,则紧接着有三个数字LRC。询问闭区间 [LR] 内有多少英雄的身高大于等于C

输出

对每个“A”询问输出一行,仅含一个整数,表示闭区间 [LR] 内身高大于等于C的英雄数。

样例输入

5 3
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4

样例输出

2
3

提示

【输入输出样例说明】
原先5个英雄身高为1、2、3、4、5,此时[1, 5]间有2个英雄的身高大于等于4。教主施法后变为1、2、4、5、6,此时[1, 5]间有3个英雄的身高大于等于4。
【数据范围】
对30%的数据,N≤1000,Q≤1000。
对100%的数据,N≤1000000,Q≤3000,1≤W≤1000,1≤C≤1,000,000,000。
分块巩固
 1 #include <algorithm>
 2 #include <iostream>
 3 #include <cstdio>
 4 #include <cmath>
 5
 6 using namespace std;
 7
 8 const int N(1005);
 9 int n,q,u,v,w,tall[N*N],now[N*N];
10
11 int cnt,bel[N*N],str[N],ove[N],tag[N];
12 #define Max(a,b) (a>b?a:b)
13 #define Min(a,b) (a<b?a:b)
14 void Build()
15 {
16     int C=sqrt(n);
17     for(int i=1;i<=n;i+=C)
18     {
19         str[++cnt]=i;
20         ove[cnt]=Min(n,i+C-1);
21         sort(now+str[cnt],now+ove[cnt]+1);
22     }
23     for(int i=1;i<=cnt;i++)
24         for(int j=str[i];j<=ove[i];j++) bel[j]=i;
25 }
26 void Update(int u,int v,int x)
27 {
28     for(int i=bel[u];i<=bel[v];i++)
29         if(str[i]>=u&&ove[i]<=v) tag[i]+=x;
30         else
31         {
32             for(int j=Max(u,str[i]);j<=Min(v,ove[i]);j++)
33                 now[j]+=x+tag[i];
34             sort(now+str[i],now+ove[i]+1);
35         }
36 }
37 int er(int k,int l,int r,int h)
38 {
39     int ans=0x7fffffff;
40     for(int mid;l<=r;)
41     {
42         mid=l+r>>1;
43         if(now[mid]+tag[k]>=h)
44             ans=Min(ans,mid),r=mid-1;
45         else l=mid+1;
46     }
47     return ans==0x7fffffff?0:(ove[k]-ans+1);
48 }
49 int Query(int u,int v,int h)
50 {
51     int ret=0;
52     for(int i=bel[u];i<=bel[v];i++)
53         if(str[i]>=u&&ove[i]<=v) ret+=er(i,str[i],ove[i],h);
54         else for(int j=Max(str[i],u);j<=Min(ove[i],v);j++)
55               if(tall[j]+tag[i]>=h) ret++;
56     return ret;
57 }
58
59 int main()
60 {
61     scanf("%d%d",&n,&q);
62     for(int i=1;i<=n;i++)
63         scanf("%d",tall+i),now[i]=tall[i];
64     Build();
65     for(char ch;q--;)
66     {
67         cin>>ch; scanf("%d%d%d",&u,&v,&w);
68         if(ch=='M') Update(u,v,w);
69         else printf("%d\n",Query(u,v,w));
70     }
71     return 0;
72 }

转载于:https://www.cnblogs.com/Shy-key/p/7219251.html

BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法相关推荐

  1. 洛谷-P2801 教主的魔法 分块

    题目 题目链接 题意 修改:将一个区间内所有的数+C. 查询:查询一个区间内>C的数字有多少个. 题解 很经典的分快算法题目. 将数列分块以后,对块内的元素进行排序. 当我们要做修改操作的时候: ...

  2. 洛谷P1133 教主的花园 动态规划

    洛谷P1133 教主的花园 动态规划 这里是环状的,但是我们并不用将他破环成链 只要枚举第一个点 根据第一个点选择最后一个选择什么就行了 然后我们进行DP 注意如果当前是 2 的话要分情况 上一次是上 ...

  3. 洛谷P2483 Bzoj1975 [SDOI2010]魔法猪学院

    题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...

  4. 洛谷P1198 [JSOI2008]最大数

    P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...

  5. Bzoj 3343: 教主的魔法(分块+二分答案)

    3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...

  6. 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径

    //bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...

  7. 洛谷 P2046 BZOJ 2007 海拔(NOI2010)

    题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...

  8. luogu P2801 教主的魔法

    luogu P2801 教主的魔法 谜之分块 初学分块,找题练练手 大概分块示意图: 分块大法好! std: #include<bits/stdc++.h> using namespace ...

  9. 洛谷·bzoj·伟大的奶牛聚集Great Cow Gather

    初见安~~这里是传送门:洛谷P2986 & bzoj P1827 题目描述 Bessie is planning the annual Great Cow Gathering for cows ...

最新文章

  1. java注解接收上传文件,前台:Input type=file 后台获取文件内容用的是spring注解,当地环境上传图片是好的,发布到服务器上图片读取不到,求大神指点...
  2. php中mb substr,php中中文截取函数mb_substr()详细
  3. 知乎云敲钟、比特币可购买特斯拉、用户隐私收集新规五一生效、 软件疯长等|Decode the Week...
  4. AspectJ学习笔记
  5. python 遗传算法 agv_基于改进遗传算法的AGV路径规划
  6. 面试官系统精讲Java源码及大厂真题 - 40 打动面试官:线程池流程编排中的运用实战
  7. TCP协议的部分解析(2)
  8. centos7系统卸载Visual Studio Code
  9. ArrayList源码简单剖析 及与linkedlist vector 区别
  10. oracle asm结构,深入了解Oracle ASM
  11. 经典配分函数公式以及量子统计形式
  12. 美团前端面试题(附答案)
  13. Lorenz系统、简单的Rossler系统和Chua电路系统的混沌吸引子——MATLAB实现
  14. 香槐路的香槐花,匆匆四年无归期。
  15. 大数据学习(一) Linux学习
  16. python数据处理7: matplotlib绘图保存图片深入
  17. 边缘计算(雾计算)——AI+IoT的热词
  18. 机器学习从蛋白序列预测蛋白分类(二)
  19. Java:Java静态多态性与动态多态性
  20. Paper Reading 《SimCSE》

热门文章

  1. python字典弱引用_python 自身遍历及弱引用的简单示例
  2. ngnix的简单转发请求之server和location配置详解
  3. rabbitmq中的队列transient和durable的区别
  4. RestTemplate返回List类型,用数组接收
  5. 美利财务平台数据库架构进阶
  6. 【unit7 unit9】cifs网络文件系统访问;vsftp服务
  7. 译 | 像使用一台主机一样管理集群
  8. 《Windows服务器配置与管理》------磁盘管理
  9. 产品经理应聘之感受漫谈
  10. 加密技术,给邮件安全加上一把锁