题目

分析

由大题目知此题分块

注意处理前驱下标的合法性

\(Code\)

#include<cstdio>
#include<cmath>
#include<algorithm>
using namespace std; const int N = 1e5 + 5;
int n, a[N], t[N], st[N], ed[N], be[N], tag[N]; void Sort(int x)
{
for(register int i = st[x]; i <= ed[x]; i++) t[i] = a[i];
sort(t + st[x], t + ed[x] + 1);
} void prepare()
{
int num = (int)sqrt(n);
for(register int i = 1; i <= num; i++) st[i] = n / num * (i - 1) + 1, ed[i] = n / num * i;
ed[num] = n;
for(register int i = 1; i <= num; i++)
{
for(register int j = st[i]; j <= ed[i]; j++) be[j] = i;
Sort(i);
}
} void update(int l, int r, int c)
{
int x = be[l], y = be[r];
if (x == y)
{
for(register int i = l; i <= r; i++) a[i] += c;
Sort(x); return;
}
for(register int i = l; i <= ed[x]; i++) a[i] += c;
for(register int i = st[y]; i <= r; i++) a[i] += c;
for(register int i = x + 1; i <= y - 1; i++) tag[i] += c;
Sort(x), Sort(y);
} int get(int x, int y, int c)
{
if (!x || !y) return x + y;
int p = c - t[x] - tag[be[x]], q = c - t[y] - tag[be[y]];
return (p < q) ? (x) : (y);
} int query(int l, int r, int c)
{
int x = be[l], y = be[r], p, q = 0x3f3f3f3f;
if (x == y)
{
for(register int i = l; i <= r; i++)
if (a[i] + tag[x] < c && c - a[i] - tag[x] < q) q = c - a[i] - tag[x];
return (q == 0x3f3f3f3f) ? (-1) : (c - q);
}
for(register int i = l; i <= ed[x]; i++)
if (a[i] + tag[x] < c && c - a[i] - tag[x] < q) q = c - a[i] - tag[x];
for(register int i = st[y]; i <= r; i++)
if (a[i] + tag[y] < c && c - a[i] - tag[y] < q) q = c - a[i] - tag[y];
for(register int i = x + 1; i <= y - 1; i++)
{
p = lower_bound(t + st[i], t + ed[i] + 1, c - tag[i]) - t - 1;
if (p < st[i]) continue;
if (c - t[p] - tag[i] < q) q = c - t[p] - tag[i];
}
return (q == 0x3f3f3f3f) ? (-1) : (c - q);
} int main()
{
scanf("%d", &n);
for(register int i = 1; i <= n; i++) scanf("%d", &a[i]);
prepare();
for(register int i = 1, opt, l, r, c; i <= n; i++)
{
scanf("%d%d%d%d", &opt, &l, &r, &c);
if (opt == 0) update(l, r, c);
else printf("%d\n", query(l, r, c));
}
}

最新文章

  1. TODO:Golang语言TCP/UDP协议重用地址端口
  2. Python的模块引用和查找路径
  3. configure: error: no acceptable C compiler found in $PAT 的解决方案
  4. C#操作Excel的函数
  5. JS判断输入是否为整数和数字的正则表达式
  6. TreeList的使用
  7. CUDA学习笔记(二)【转】
  8. Spring和SpringMVC的区别
  9. HDU 5869 Different GCD Subarray Query (GCD种类预处理+树状数组维护)
  10. 28.怎样在Swift中实现单例?
  11. ACM2032
  12. tcp/ip连接
  13. CentOS minimal 版安装图形界面及中文语言
  14. shell是什么,各种shell的初步认识,适用于初学者
  15. Jenkins2 插件 Pipeline+BlueOcean 实现持续交付的初次演练
  16. Batchnorm
  17. pandas实现excel中的数据透视表和Vlookup函数功能
  18. swift 设置阴影和圆角
  19. Minimum Transport Cost HDU1385(路径打印)
  20. ECShop 调用自定义广告

热门文章

  1. orcl substr函数与java substring 的不同
  2. .net 温故知新:【10】.NET ORM框架EFCore使用入门之CodeFirs、DBFirst
  3. Qwt开发笔记(一):Qwt简介、下载以及基础demo工程模板
  4. uni 结合vuex 编写动态全局配置变量 this.baseurl
  5. #define 的神奇操作
  6. 【大数据-课程】高途-天翼云侯圣文-Day3-实时计算原理解析
  7. Burpsuite2022.1详细图文安装教程(含工具链接)
  8. 在Windows服务器安装禅道
  9. JavaScript:控制跳转:break、continue与标签
  10. Linux基础第五章 进程控制