题目链接:https://loj.ac/problem/6279

题目大意:中文题目

具体思路:按照上一个题的模板改就行了,但是注意在整块查找的时候的下标问题。

AC代码:

  1. #include<bits/stdc++.h>
  2. using namespace std;
  3. # define ll long long
  4. const int maxn = 2e5+;
  5. const int mod = 1e8+;
  6. const int inf = 0x3f3f3f3f;
  7. ll l[maxn],r[maxn],belong[maxn];
  8. ll add[maxn],a[maxn],b[maxn];
  9. int n;
  10. void buildblock()
  11. {
  12. ll tmp=(ll)sqrt(n);
  13. ll tot=n/tmp;
  14. if(n%tmp)
  15. tot++;
  16. for(ll i=; i<=n; i++)
  17. {
  18. belong[i]=(i-)/tmp+1ll;
  19. }
  20. for(ll i=; i<=tot; i++)
  21. {
  22. l[i]=(i-)*tmp+1ll;
  23. r[i]=i*tmp;
  24. }
  25. r[tot]=n;
  26. for(ll i=; i<=tot; i++)
  27. {
  28. sort(b+l[i],b+r[i]+);
  29. }
  30. }
  31. void init(int tmp){
  32. for(int i=l[tmp];i<=r[tmp];i++)b[i]=a[i];
  33. sort(b+l[tmp],b+r[tmp]+);
  34. }
  35. void update(ll st,ll ed,ll val)
  36. {
  37. if(belong[st]==belong[ed])
  38. {
  39. for(ll i=st; i<=ed; i++)a[i]+=val;
  40. init(belong[st]);
  41. return ;
  42. }
  43. for(ll i=st; i<=r[belong[st]]; i++)a[i]+=val;
  44. init(belong[st]);
  45. for(ll i=l[belong[ed]]; i<=ed; i++)a[i]+=val;
  46. init(belong[ed]);
  47. for(ll i=belong[st]+; i<belong[ed]; i++)
  48. add[i]+=val;
  49. }
  50. ll ask(ll st,ll ed,ll val)
  51. {
  52. ll ans=-inf;
  53. if(belong[st]==belong[ed])
  54. {
  55. for(ll i=st; i<=ed; i++)
  56. {
  57. if(a[i]+add[belong[st]]>=val)continue;
  58. ans=max(ans,a[i]+add[belong[st]]);
  59. }
  60. return ans;
  61. }
  62. for(ll i=st; i<=r[belong[st]]; i++)
  63. {
  64. if(a[i]+add[belong[st]]>=val)continue;
  65. ans=max(ans,a[i]+add[belong[st]]);
  66. }
  67. for(ll i=l[belong[ed]]; i<=ed; i++)
  68. {
  69. if(a[i]+add[belong[ed]]>=val)continue;
  70. ans=max(ans,a[i]+add[belong[ed]]);
  71. }
  72. for(ll i=belong[st]+; i<belong[ed]; i++)
  73. {
  74. ll tmp=val-add[i];
  75. ll id=lower_bound(b+l[i],b+r[i]+,tmp)-(b+l[i]);
  76. if(id==)continue;
  77. ans=max(ans,b[l[i]+id-]+add[i]);
  78. }
  79. return ans;
  80. }
  81. int main()
  82. {
  83. // freopen("hqx.in","r",stdin);
  84. // cout<<lower_bound(a,a+5,2)-a<<endl;
  85. scanf("%d",&n);
  86. for(int i=; i<=n; i++)
  87. {
  88. scanf("%lld",&a[i]);
  89. b[i]=a[i];
  90. }
  91. buildblock();
  92. ll op,st,ed;
  93. ll val;
  94. while(n--)
  95. {
  96. scanf("%lld %lld %lld %lld",&op,&st,&ed,&val);
  97. if(op==)
  98. {
  99. update(st,ed,val);
  100. }
  101. else if(op==)
  102. {
  103. ll tmp=ask(st,ed,val);
  104. printf("%lld\n",tmp==-inf?-:tmp);
  105. }
  106. }
  107. return ;
  108. }

#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. QSS网址

    http://blog.csdn.net/liang19890820/article/details/51691212 https://www.cnblogs.com/cy568searchx/p/3 ...

  2. vue实现购物车和地址选配(二)

    参考文献: vue官网: vue.js 效果展示:全选和取消全选,计算总金额 项目源代码:https://github.com/4561231/hello_world 项目核心代码实现及踩坑 1.全选 ...

  3. apache thrift分析

    thrift是一个用来实现跨语言的远程调用(RPC Remote Procedure Call)的软件框架.根据接口定义语言(IDL Interface definition lanuage) 并借助 ...

  4. RS485 / RS422

    RS422可以变为RS485:A和Y短路(然后接T/R+),B和Z短路(然后接T/R-) RS485是半双工,只有两根线通信线,要么接收状态,要么发送状态 RE为低电平,作为接收器 DE为高电平,作为 ...

  5. python字典练习题

    python字典练习题 写代码:有如下字典按照要求实现每一个功能dict = {"k1":"v1","k2":"v2", ...

  6. Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小

    Linux网卡调优篇-禁用ipv6与优化socket缓冲区大小 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任.   一般在内网环境中,我们几乎是用不到IPV6,因此我们没有必要把多不 ...

  7. kafka常见异常汇总

      1>.java.lang.OutOfMemoryError:Map failed 发生上述问题,原因是发生OOM啦,会导致kafka进程直接崩溃掉!因此我们只能重新启动broker节点了,但 ...

  8. JDK动态代理和CGLIB代理的区别

    一.原理区别: java动态代理是利用反射机制生成一个实现代理接口的匿名类,在调用具体方法前调用InvokeHandler来处理. 而cglib动态代理是利用asm开源包,对代理对象类的class文件 ...

  9. Hadoop问题:Input path does not exist: hdfs://Master:9000/user/hadoop/input

    问题描述: org.apache.hadoop.mapreduce.lib.input.InvalidInputException: Input path does not exist: hdfs:/ ...

  10. 如何优雅地使用Sublime Text3

    此文非原创,出处见文章结尾. 一.Sublime Text 3插件安装 优雅使用Sublime Text,插件则是不可缺少的存在:而插件的备份就显得非常的重要(譬如:各平台同步:更换系统/电脑,迅速使 ...