原题:http://www.caioj.cn/problem.php?id=1246

题解:本题要查询前驱,即比x小的最大值。考虑分块,对每个块排序,二分查找x,维护个最大值。

#include<cstdio>
#include<cstring>
#include<algorithm>
#include<vector>
#include<cmath>
#define reg register
#define N 110000
#define M 550
using namespace std;
int n,m,a[N],sum[M],pos[N];
vector<int> v[M];inline int rd(){int x=0;int f=1;char s=getchar();while(s>'9' || s<'0') f=(s=='-'?-1:f),s=getchar();while(s>='0' && s<='9')x=(x<<1)+(x<<3)+s-'0',s=getchar(); return x*f;
}
inline void reset(int x){v[x].clear();for(reg int i=(x-1)*m+1;i<=x*m;i++) v[x].push_back(a[i]);sort(v[x].begin(),v[x].end());
}
inline void add(int l,int r,int c){for(reg int i=l;i<=min(r,pos[l]*m);i++) a[i]+=c;reset(pos[l]);if(pos[l]!=pos[r]) {for(reg int i=(pos[r]-1)*m+1;i<=r;i++) a[i]+=c;reset(pos[r]);}for(reg int i=pos[l]+1;i<=pos[r]-1;i++) sum[i]+=c; return ;
}inline int query(int l,int r,int c){int ans=-1;for(int i=l;i<=min(r,pos[l]*m);i++) if(a[i]+sum[pos[i]]<c) ans=max(ans,a[i]+sum[pos[i]]);if(pos[l]!=pos[r]){for(reg int i=(pos[r]-1)*m+1;i<=r;i++) if(a[i]+sum[pos[i]]<c) ans=max(ans,a[i]+sum[pos[i]]);}for(reg int i=pos[l]+1;i<=pos[r]-1;i++){int p=lower_bound(v[i].begin(),v[i].end(),c-sum[i])-v[i].begin();//p-1if(p==0) continue;ans=max(ans,v[i][p-1]+sum[i]); } return ans;
}
int  main(){
//  freopen("input.in","r",stdin);n=rd();m=sqrt(n);   for(reg int i=1;i<=n;i++) a[i]=rd(),pos[i]=(i-1)/m+1,v[pos[i]].push_back(a[i]);for(reg int i=1;i<=pos[n];i++) sort(v[i].begin(),v[i].end());for(reg int i=1,opt,l,r,c;i<=n;i++){opt=rd();l=rd();r=rd();c=rd();if(opt==0) add(l,r,c);else printf("%d\n",query(l,r,c));}return 0;
} 

转载于:https://www.cnblogs.com/Exception2017/p/10252085.html

数列分块入门3(查询前驱)相关推荐

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

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

  2. #6279. 数列分块入门 3(区间修改,查询权值前驱)

    #6279. 数列分块入门 3 这是使用hzwer建议的set写的分块代码,set自动排序,支持二分查找,但是常数较大,比我下面写的用vector实现的分块慢了三倍,空间大了10倍. #include ...

  3. LOJ——#6277. 数列分块入门 1

    ~~推荐播客~~ 「分块」数列分块入门1 – 9 by hzwer 浅谈基础根号算法--分块 博主蒟蒻,有缘人可直接观摩以上大佬的博客... #6277. 数列分块入门 1 题目大意: 给出一个长为 ...

  4. 【分块入门】LOJ 数列分块入门 1 - 9 (学习更新……)

    dl题解 _「分块」数列分块入门1 – 9 by hzwer LOJ #6277. 数列分块入门 1 题意:给出一个长为n的数列,以及n个操作,操作涉及区间加法,单点查值. 时间限制:100ms 分块 ...

  5. 数列分块入门(套题)(loj6277,loj6278,loj6279,loj6280,loj6281,loj6282,loj6283,loj6284,loj6285)

    前言 zjoi考差了,码一些分块题缓解一下心情 壹 数列分块入门 1[loj6277] 题目大意:区间加,单点查 直接分块,区间加时完全覆盖的块打tag,边界块暴力重构 块大小设为n\sqrt nn​ ...

  6. 数列分块入门 (1 ~ 7)

    分块 6277. 数列分块入门 1 分块思想 我们把每m个元素分成一块,所以我们总共的块数就是n/mn / mn/m块,一般情况下我们取m=nm = \sqrt{n}m=n​.对于区间加操作,我们可以 ...

  7. 「分块」数列分块入门1 – 9

    ACM模板 放暑假了,回归!!! 自己不会写暴力,而且好久没写代码了,于是学学分块的优雅暴力~ 「分块入门-LibreOJ」 「分块」数列分块入门1 – 9 by hzwer 数列简单分块问题实际上有 ...

  8. 「分块系列」数列分块入门3 解题报告

    数列分块入门3 题意概括 区间加法,区间求前驱. 写在前面 这题的方法与分块2方法极其类似,建议自行解决. 正题 和上一题类似,但是二分不是用来计数的,而是用来求小于c的最大值的.然后对于不完整快,将 ...

  9. LOJ 数列分块入门6

    LOJ 数列分块入门6 题目: 题目 题解: 我都不懂这题为什么要用分块... ... 直接vector就好了... 但是如果有区间修改的话就不行了.所以这题是启示我们也可以动态分块.具体就是每次插入 ...

最新文章

  1. 2017 年总结及 2018 年计划
  2. 微信小程序scroll-view的使用
  3. 带无线驱动的linux版本,怎么在Linux里查询无线网卡的驱动程序版本
  4. 二叉搜索树的第k个节点java_剑指Offer62:二叉搜索树的第k个结点(Java)
  5. Serializable:明明就一个空接口!为什么还要实现它?
  6. DCMTK:测试DcmSCP和DcmSCU类
  7. python根据地址查看变量名_tensorflow创建变量以及根据名称查找变量
  8. python该怎样使用_Python 应该怎么去练习和使用?
  9. 微信小程序和vue双向绑定哪里不一样_浅析Vue 和微信小程序的区别、比较
  10. java中的浮点数相加
  11. 拼多多关联公司申请“碰多多”、“碰碰多”商标
  12. 一加7 Pro 5G版也来了:入网工信部 售价将破5000元
  13. 春招你必须掌握的Python经典面试题(附赠简历模版)
  14. Linux信息显示命令,Linux常用信息显示命令
  15. 计算机网络cr什么意思,网络用语cr是什么意思
  16. 【EhCache: 一款Java的进程内缓存框架】EhCache 是什么、代码实战、版本3的改进
  17. php mpm,PHP使用Apache中的ab测试网站的压力性能及mpm介绍
  18. Gwallet小百科 | 一文透析腾讯区块链技术
  19. python中,Microsoft Visual C++ 14.0 or greater is required问题解决方案
  20. 数据保护:UPS不间断电源初步使用

热门文章

  1. git push 的符号笔有什么用_Git自救指南(一)——工欲善其事,必先利其器,基本概念概览...
  2. qt checkbox 选中事件_丽声事件 | 十堰市第五届全国青少儿播音主持等级考试圆满落幕...
  3. matlab相关论文,matlab
  4. Linux 利用nginx源码编译安装nginx
  5. SpringMVC获取Request,Response, Session对象
  6. 下拉多选择框 实现方式_非极大值抑制Non-Maximum Suppression(NMS)一文搞定理论+多平台实现...
  7. 离散实验偏序关系满足实验报告C语言,离散数学实验三:偏序关系中盖住关系的求取及格论中有补格的判定...
  8. 综艺节目php灭灯_非诚勿扰php程序员 结果遭女嘉宾瞬间全灭灯
  9. 克里斯蒂安贝尔_克里斯蒂安贝尔和乌云背后的幸福线导演合作神秘“大片”
  10. torchvision0.2.2_Xcode 10.2