题目链接: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 的前驱(比其小的最大元素))的更多相关文章

  1. #6278. 数列分块入门 2(询问区间内小于某个值 xx 的元素个数)

    题目链接:https://loj.ac/problem/6278 题目大意:中文题目 具体思路:数列分块模板题,对于更新的时候,我们通过一个辅助数组来进行,对于原始的数组,我们只是用来加减,然后这个辅 ...

  2. LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))

    #6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3   题目描述 给 ...

  3. LOJ #6278. 数列分块入门 2-分块(区间加法、查询区间内小于某个值x的元素个数)

    #6278. 数列分块入门 2 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 6   题目描述 给出 ...

  4. loj 6278 6279 数列分块入门 2 3

    参考:「分块」数列分块入门1 – 9 by hzwer 2 Description 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间加法,询问区间内小于某个值\(x\)的元素个数. 思 ...

  5. LOJ #6277. 数列分块入门 1-分块(区间加法、单点查询)

    #6277. 数列分块入门 1 内存限制:256 MiB时间限制:100 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  6. LOJ #6283. 数列分块入门 7-分块(区间乘法、区间加法、单点查询)

    #6283. 数列分块入门 7 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 2   题目描述 给出 ...

  7. LOJ #6281. 数列分块入门 5-分块(区间开方、区间求和)

    #6281. 数列分块入门 5 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 5   题目描述 给出 ...

  8. LOJ #6280. 数列分块入门 4-分块(区间加法、区间求和)

    #6280. 数列分块入门 4 内存限制:256 MiB时间限制:500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论   题目描述 给出一个 ...

  9. loj 数列分块入门 6 9(区间众数)

    6 题意 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及单点插入,单点询问,数据随机生成. 题解 参考:http://hzwer.com/8053.html 每个块内用一个\(vecto ...

随机推荐

  1. 使用bcftools提取指定样本的vcf文件(extract specified samples in vcf format)

    1.下载安装bcftools. 2.准备样本ID文件,这里命名为samplelistname.txt,一个样本一行,如下所示: sample1 sample2 sample3 3.输入命令: bcft ...

  2. fcntl F_SETFL

    F_SETFL file set flag F_SETFL命令允许更改的标志有O_APPEND,O_NONBLOCK,O_NOATIME,O_DIRECT,O_ASYNC 这个操作修改文件状态标记适用 ...

  3. HTML学习笔记Day2

    一.部分表单元素的使用 1.表单的作用:用来收集用户信息 2.表单元素 (1)表单控件: 单行文本框:<input  type="text" value="默认值& ...

  4. [USACO13FEB] Tractor

    题目链接 大家的 Blog 里面都是做过的题目,只有我的里面什么都没有 那我也开始写一点吧 刷着刷着 DP 不知怎的就出来一道这个题……用时 2 hours 后怒而删两个文件重构…… 然后过了……过了 ...

  5. go tcp

    TCP编程 1.客户端和服务器 2.服务端的处理流程 监听端口 接收客户端的链接 创建goroutine,处理该链接 3.客户端的处理流程 建立与服务端的链接 进行数据收发 关闭链接 服务端代码 pa ...

  6. python机器学习-sklearn挖掘乳腺癌细胞(一)

    python机器学习-sklearn挖掘乳腺癌细胞( 博主亲自录制) 网易云观看地址 https://study.163.com/course/introduction.htm?courseId=10 ...

  7. 实战Google深度学习框架-C5-MNIST数字识别问题

    5.1 MNIST数据处理 MNIST是NIST数据集的一个子集,包含60000张图片作为训练数据,10000张作为测试数据,其中每张图片代表0~9中的一个数字,图片大小为28*28(可以用一个28* ...

  8. flask form表单验证

    新建forms.py文件 #!/usr/bin/env python #-*-coding:utf--*- #导入模块 from flask_wtf import FlaskForm #FlaskFo ...

  9. urllib 学习二

    编码解码: python2 用法: urllib.urlencode() 编码 urlparse.parse_qs() 解码 python3 用法: urllib.parse.urlencode() ...

  10. hd loadBalanceServer F5 BIG-IP / Citrix NetScaler / Radware / Array / HAProxy /

    s 五.Citrix NetScaler 和 CDN 案例 问题描述: Citrix 10.5.66.9软件版本下,存在计时器bug,此bug会造成CDN长连接回源超过设备默认的180S,会发fin包 ...