BZOJ——3343: 教主的魔法 || 洛谷—— P2801 教主的魔法
http://www.lydsy.com/JudgeOnline/problem.php?id=3343 || https://www.luogu.org/problem/show?pid=2801
题目描述
输入
输出
样例输入
1 2 3 4 5
A 1 5 4
M 3 5 1
A 1 5 4
样例输出
3
提示
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 教主的魔法相关推荐
- 洛谷-P2801 教主的魔法 分块
题目 题目链接 题意 修改:将一个区间内所有的数+C. 查询:查询一个区间内>C的数字有多少个. 题解 很经典的分快算法题目. 将数列分块以后,对块内的元素进行排序. 当我们要做修改操作的时候: ...
- 洛谷P1133 教主的花园 动态规划
洛谷P1133 教主的花园 动态规划 这里是环状的,但是我们并不用将他破环成链 只要枚举第一个点 根据第一个点选择最后一个选择什么就行了 然后我们进行DP 注意如果当前是 2 的话要分情况 上一次是上 ...
- 洛谷P2483 Bzoj1975 [SDOI2010]魔法猪学院
题目描述 iPig在假期来到了传说中的魔法猪学院,开始为期两个月的魔法猪训练.经过了一周理论知识和一周基本魔法的学习之后,iPig对猪世界的世界本原有了很多的了解:众所周知,世界是由元素构成的:元素与 ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- Bzoj 3343: 教主的魔法(分块+二分答案)
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MB Description 教主最近学会了一种神奇的魔法,能够使人长高.于是他准备演示给XMYZ信息 ...
- 洛谷 P4151 BZOJ 2115 [WC2011]最大XOR和路径
//bzoj上的题面太丑了,导致VJ的题面也很丑,于是这题用洛谷的题面 题面描述 XOR(异或)是一种二元逻辑运算,其运算结果当且仅当两个输入的布尔值不相等时才为真,否则为假. XOR 运算的真值表如 ...
- 洛谷 P2046 BZOJ 2007 海拔(NOI2010)
题目描述 YT市是一个规划良好的城市,城市被东西向和南北向的主干道划分为n×n个区域.简单起见,可以将YT市看作 一个正方形,每一个区域也可看作一个正方形.从而,YT城市中包括(n+1)×(n+1)个 ...
- luogu P2801 教主的魔法
luogu P2801 教主的魔法 谜之分块 初学分块,找题练练手 大概分块示意图: 分块大法好! std: #include<bits/stdc++.h> using namespace ...
- 洛谷·bzoj·伟大的奶牛聚集Great Cow Gather
初见安~~这里是传送门:洛谷P2986 & bzoj P1827 题目描述 Bessie is planning the annual Great Cow Gathering for cows ...
最新文章
- java注解接收上传文件,前台:Input type=file 后台获取文件内容用的是spring注解,当地环境上传图片是好的,发布到服务器上图片读取不到,求大神指点...
- php中mb substr,php中中文截取函数mb_substr()详细
- 知乎云敲钟、比特币可购买特斯拉、用户隐私收集新规五一生效、 软件疯长等|Decode the Week...
- AspectJ学习笔记
- python 遗传算法 agv_基于改进遗传算法的AGV路径规划
- 面试官系统精讲Java源码及大厂真题 - 40 打动面试官:线程池流程编排中的运用实战
- TCP协议的部分解析(2)
- centos7系统卸载Visual Studio Code
- ArrayList源码简单剖析 及与linkedlist vector 区别
- oracle asm结构,深入了解Oracle ASM
- 经典配分函数公式以及量子统计形式
- 美团前端面试题(附答案)
- Lorenz系统、简单的Rossler系统和Chua电路系统的混沌吸引子——MATLAB实现
- 香槐路的香槐花,匆匆四年无归期。
- 大数据学习(一) Linux学习
- python数据处理7: matplotlib绘图保存图片深入
- 边缘计算(雾计算)——AI+IoT的热词
- 机器学习从蛋白序列预测蛋白分类(二)
- Java:Java静态多态性与动态多态性
- Paper Reading 《SimCSE》