P2801 教主的魔法 [分块]

2024-01-30 02:18
文章标签 魔法 分块 教主 p2801

本文主要是介绍P2801 教主的魔法 [分块],希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

传送门

整块打tag , 单块暴力修改 

另外开一个数组b 为一块内的a排序后的数组

显然整块修改不会影响排序 , 查询时加上tag就可以

暴力修改a数组 然后重新赋值再排序 , 这样是O(\sqrt nlogn)的

查询时块外暴力 , 块内二分就可以了 


#include<bits/stdc++.h>
#define N 1000050
#define LL long long
using namespace std;
int read(){int cnt=0; char ch=0;while(!isdigit(ch))ch=getchar();while(isdigit(ch))cnt=cnt*10+(ch-'0'),ch=getchar();return cnt;
}
int n,q,a[N],tot; LL b[N],tag[N];
int pos[N],l[N],r[N];
void build(){int siz = sqrt(n);for(int i=1;i<=n;i++) pos[i] = (i-1)/siz + 1;for(int i=1;i<=n;i+=siz){l[++tot] = i; r[tot] = i + siz - 1;if(i + siz - 1 > n) r[tot] = n;sort(b+l[tot],b+r[tot]+1);}
}
void Modify(int L,int R,int val){int p1 = pos[L] , p2 = pos[R];if(p1==p2){for(int i=L;i<=R;i++) a[i] += val;for(int i=l[p1];i<=r[p1];i++) b[i] = a[i];sort(b+l[p1],b+r[p1]+1);}else if(p1==p2-1){for(int i=L;i<=R;i++) a[i] += val;for(int i=l[p1];i<=r[p2];i++) b[i] = a[i];sort(b+l[p1],b+r[p1]+1);sort(b+l[p2],b+r[p2]+1);}else{for(int i=L;i<=r[p1];i++) a[i] += val;for(int i=l[p2];i<=R;i++) a[i] += val;for(int i=l[p1];i<=r[p1];i++) b[i] = a[i];for(int i=l[p2];i<=r[p2];i++) b[i] = a[i];for(int i=p1+1;i<p2;i++) tag[i] += val;sort(b+l[p1],b+r[p1]+1);sort(b+l[p2],b+r[p2]+1);}
}
int calc(int x,int val){int L=l[x],R=r[x];while(L<R){int mid = (L+R) >> 1;if(b[mid] + tag[x] >= val) R = mid;else L = mid + 1;}if(b[L]+tag[x]<val) return 0;return r[x] - L + 1;
}
int Quary(int L,int R,int val){int p1 = pos[L] , p2 = pos[R];int ans = 0;if(p1==p2){for(int i=L;i<=R;i++)if(b[i] + tag[p1] >= val) ans++;return ans;}else if(p1==p2-1){for(int i=L;i<=r[p1];i++) if(b[i] + tag[p1] >= val) ans++;for(int i=l[p2];i<=R;i++) if(b[i] + tag[p2] >= val) ans++;return ans;}else{for(int i=L;i<=r[p1];i++) if(b[i] + tag[p1] >= val) ans++;for(int i=l[p2];i<=R;i++) if(b[i] + tag[p2] >= val) ans++;for(int i=p1+1;i<p2;i++) ans += calc(i,val);return ans;}
}
int main(){n=read(),q=read();for(int i=1;i<=n;i++) a[i]=b[i]=read();build(); char s[3];while(q--){scanf("%s",s); int x=read(),y=read(),val=read();if(s[0]=='M') Modify(x,y,val);if(s[0]=='A') printf("%d\n",Quary(x,y,val));}return 0;
}

 

这篇关于P2801 教主的魔法 [分块]的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/658828

相关文章

探索Python的数学魔法:Numpy库的神秘力量

文章目录 探索Python的数学魔法:Numpy库的神秘力量背景:为什么选择Numpy?Numpy是什么?如何安装Numpy?五个简单的库函数使用方法场景应用常见Bug及解决方案总结 探索Python的数学魔法:Numpy库的神秘力量 背景:为什么选择Numpy? 在Python的世界中,数据处理和科学计算是不可或缺的一部分。但原生Python在处理大规模数据时可能会显

玩转Python Turtle库,实现满屏飘字的魔法!

前言     本文将教你如何使用Python的Turtle库,通过简单的编程实现满屏飘字的炫酷效果。无需复杂的编程知识,跟着我们的步骤,你也可以成为编程小达人! 效果展示 开发过程 一、准备工作 首先,确保你的电脑上已经安装了Python环境。然后,你需要安装或更新Turtle库(通常Python安装时自带了Turtle库)。 二、编写代码 接下来,我们将通过编写一个简单的P

重复采样魔法:用更多样本击败单次尝试的最强模型

这篇文章探讨了通过增加生成样本的数量来扩展大型语言模型(LLMs)在推理任务中的表现。 研究发现,重复采样可以显著提高模型的覆盖率,特别是在具有自动验证工具的任务中。研究还发现,覆盖率与样本数量之间的关系可以用指数幂律建模,揭示了推理时间的扩展规律。尽管多数投票和奖励模型在样本数量增加时趋于饱和,但在没有自动验证工具的任务中,识别正确样本仍然是一个重要的研究方向。 总体而言,重复采样提供了一种

07_TensorFlow2图像编解码大揭秘:让图片说‘变’就‘变’,魔法还是科技?

1. 图像的编码和解码 在实际应用中,图像数据源格式多种多样,如:png\jpg\bmp等,而神经网络训练模型所需的图像的数据格式为:图像字节数据或Base64编码数据等。基于此,将png\jpg\bmp等格式的图像转换为字节数据的过程称为图像编码,将字节数据的图像转换为png\jpg\bmp等格式图像的过程称为图像解码。 2. 图像编码 Tensorflow图像编码的过程如下图所示,分

【Jupyter】 Notebook 中的 IPython 魔法:12个必知实用技巧

Jupyter Notebook 作为一个强大的交互式计算环境,结合 IPython 的功能,为数据科学家和程序员提供了丰富的工具。本文将介绍12个在 Jupyter Notebook 中使用 IPython 的实用技巧 1. 清除输出:使用 clear_output() from IPython.display import clear_output# 执行一些操作print("This

Spring Boot实现大文件分块上传

1.分块上传使用场景 大文件加速上传:当文件大小超过100MB时,使用分片上传可实现并行上传多个Part以加快上传速度。 网络环境较差:网络环境较差时,建议使用分片上传。当出现上传失败的时候,您仅需重传失败的Part。 文件大小不确定: 可以在需要上传的文件大小还不确定的情况下开始上传,这种场景在视频监控等行业应用中比较常见。 2.实现原理 实现原理其实很简单,核心就是客户端把大文件

【BNU】40719 Arithmetic Progressions【分块+FFT】

传送门:【BNU】40719 Arithmetic Progressions 题目分析: 用分块+FFT强行AC了这题…… 之前一直TLE……然后改了好久把姿势改的优美点了……终于过了…… 大概思路是:我们考虑分块,假设每一块的大小为S,一共分了B块然后我们分两种情况讨论: 1.第二个数在第i块,第一个数在(1~i-1)块内,第三个数在(i+1~B)块内。 2.至少两个数在同一块内。

【HDU】5213 Lucky 【分块(在线算法)】

传送门:【HDU】5213 Lucky 题目分析: 我来说一下这题的在线做法。 首先我们将区间分成 n√ \sqrt n块,用f[x][y]表示第x块的数和第y块的数相加等于K的对数,这个可以 O(nn√) O(n \sqrt n)的预处理。然后还有g[x][y]表示在第1~x块中有的大小为y的数的个数,这个的复杂度同样 O(nn√) O(n \sqrt n)。 接下来,对于每组询问,我们

【深度学习 激活函数】激活函数:深度学习界的“魔法药剂”

大家好!今天我们来聊聊深度学习中的一个重要角色——激活函数。你是否曾经好奇过,为什么神经网络能像魔法一样识别图片、理解和生成文字?答案就在于这些神奇的激活函数! 激活函数:神经网络的“心跳” 想象一下,神经网络就像一个巨大的生物体,而激活函数就是它的心跳。没有心跳,生物体就无法生存;同样,没有激活函数,神经网络就无法正常工作。 激活函数的“魔法” 激活函数就像是给神经网络施加了魔法,让它们

【C#编程技术总结】魔法包唤醒同一局域网设备

目录 一、原理 Wake-on-LAN (WOL) 的工作原理 典型应用场景 配置要求 注意事项 二、代码 一、原理 魔术包(Magic Packet)是Wake-on-LAN(WOL)技术的一部分,它允许远程唤醒网络设备,如计算机或服务器。这个功能通常用于节能和远程管理,当设备处于待机或休眠状态时,可以通过网络将其唤醒,而无需物理操作。 Wake-on-LAN (WOL