#6279. 数列分块入门 3(询问区间内小于某个值 xx 的前驱(比其小的最大元素))
题目链接:https://loj.ac/problem/6279
题目大意:中文题目
具体思路:按照上一个题的模板改就行了,但是注意在整块查找的时候的下标问题。
AC代码:
- #include<bits/stdc++.h>
- using namespace std;
- # define ll long long
- const int maxn = 2e5+;
- const int mod = 1e8+;
- const int inf = 0x3f3f3f3f;
- ll l[maxn],r[maxn],belong[maxn];
- ll add[maxn],a[maxn],b[maxn];
- int n;
- void buildblock()
- {
- ll tmp=(ll)sqrt(n);
- ll tot=n/tmp;
- if(n%tmp)
- tot++;
- for(ll i=; i<=n; i++)
- {
- belong[i]=(i-)/tmp+1ll;
- }
- for(ll i=; i<=tot; i++)
- {
- l[i]=(i-)*tmp+1ll;
- r[i]=i*tmp;
- }
- r[tot]=n;
- for(ll i=; i<=tot; i++)
- {
- sort(b+l[i],b+r[i]+);
- }
- }
- void init(int tmp){
- for(int i=l[tmp];i<=r[tmp];i++)b[i]=a[i];
- sort(b+l[tmp],b+r[tmp]+);
- }
- void update(ll st,ll ed,ll val)
- {
- if(belong[st]==belong[ed])
- {
- for(ll i=st; i<=ed; i++)a[i]+=val;
- init(belong[st]);
- return ;
- }
- for(ll i=st; i<=r[belong[st]]; i++)a[i]+=val;
- init(belong[st]);
- for(ll i=l[belong[ed]]; i<=ed; i++)a[i]+=val;
- init(belong[ed]);
- for(ll i=belong[st]+; i<belong[ed]; i++)
- add[i]+=val;
- }
- ll ask(ll st,ll ed,ll val)
- {
- ll ans=-inf;
- if(belong[st]==belong[ed])
- {
- for(ll i=st; i<=ed; i++)
- {
- if(a[i]+add[belong[st]]>=val)continue;
- ans=max(ans,a[i]+add[belong[st]]);
- }
- return ans;
- }
- for(ll i=st; i<=r[belong[st]]; i++)
- {
- if(a[i]+add[belong[st]]>=val)continue;
- ans=max(ans,a[i]+add[belong[st]]);
- }
- for(ll i=l[belong[ed]]; i<=ed; i++)
- {
- if(a[i]+add[belong[ed]]>=val)continue;
- ans=max(ans,a[i]+add[belong[ed]]);
- }
- for(ll i=belong[st]+; i<belong[ed]; i++)
- {
- ll tmp=val-add[i];
- ll id=lower_bound(b+l[i],b+r[i]+,tmp)-(b+l[i]);
- if(id==)continue;
- ans=max(ans,b[l[i]+id-]+add[i]);
- }
- return ans;
- }
- int main()
- {
- // freopen("hqx.in","r",stdin);
- // cout<<lower_bound(a,a+5,2)-a<<endl;
- scanf("%d",&n);
- for(int i=; i<=n; i++)
- {
- scanf("%lld",&a[i]);
- b[i]=a[i];
- }
- buildblock();
- ll op,st,ed;
- ll val;
- while(n--)
- {
- scanf("%lld %lld %lld %lld",&op,&st,&ed,&val);
- if(op==)
- {
- update(st,ed,val);
- }
- else if(op==)
- {
- ll tmp=ask(st,ed,val);
- printf("%lld\n",tmp==-inf?-:tmp);
- }
- }
- return ;
- }
#6279. 数列分块入门 3(询问区间内小于某个值 xx 的前驱(比其小的最大元素))的更多相关文章
- #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)
题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...
- LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))
#6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给 ...
- LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)
#6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6 题目描述 给出 ...
- loj 6278 6279 数列分块入门 2 3
参考:「分块」数列分块入门1 – 9 by hzwer 2 Description 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,询问区间内小于某个值\(x\)的元素个数. 思 ...
- LOJ #6277. 数列分块入门 1-分块(区间加法、单点查询)
#6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)
#6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2 题目描述 给出 ...
- LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)
#6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5 题目描述 给出 ...
- LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)
#6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 题目描述 给出一个 ...
- loj 数列分块入门 6 9(区间众数)
6 题意 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及单点插入,单点询问,数据随机生成. 题解 参考:http://hzwer.com/8053.html 每个块内用一个\(vecto ...
随机推荐
- java键盘中输入q退出
用 java.util.Scanner 如下 public static void main(String[] args) { while(true){ Scanner scan = new Scan ...
- 使用perconna xtrabackup备份脚本
使用percona xtrabackup对两个数据库实例进行备份,备份的脚本如下所示: #!/bin/bash BASEDIR="/usr/local/mysql" BIN=&qu ...
- java中异常的面试
https://blog.csdn.net/qq_36523638/article/details/79363652 1) Java中的检查型异常和非检查型异常有什么区别? 这又是一个非常流行的Jav ...
- Explicit Constructors(显式构造函数)
按照默认规定,只有一个参数的构造函数也定义了一个隐式转换,将该构造函数对应数据类型的数据转换为该类对象,如下面所示:class String {String ( const char* p ); // ...
- nginx最简安装
在 CentOS 6.2 下安装nginx 一:nginx所需依赖的安装 用yum安装依赖: yum -y install zlib zlib-devel openssl openssl-devel ...
- bzoj3991 LCA + set
https://www.lydsy.com/JudgeOnline/problem.php?id=3991 小B最近正在玩一个寻宝游戏,这个游戏的地图中有N个村庄和N-1条道路,并且任何两个村庄之间有 ...
- jmeter counter函数问题
${__counter(FALSE,)}此函数比较奇怪,放在jsr223前置处理器中引用时不知道为啥,第一个值是2.但是放在其他位置时第一个值是1 真是诡异啊!不知道是不是bug呢 放在标题里引用,t ...
- Redash 安装部署
介绍 是一款开源的BI工具,提供了基于web的数据库查询和数据可视化功能. 官网:https://redash.io/ GitHub:https://github.com/getredash/reda ...
- OS + RedHat 6.3 x64 NFS / mount.nfs: access denied by server while mounting
s Linux mount/unmount命令(转) https://www.cnblogs.com/xd502djj/p/3809375.html 问题2:NFS配置项no_root_squash和 ...
- 检索 COM 类工厂中 CLSID 为 {00024500-0000-0000-C000-000000000046} 的组件时失 败,原因是出现以下错误: 80080005
.Net MVC项目,在下载一个Excel的时候总是报错. 解决办法: 在服务器中,运行dcomcnfg打开组件服务, 依次展开"组件服务"->"计算机" ...