题目

分析

由大题目知此题分块

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

\(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));
}
}

LOJ.数列分块入门3的更多相关文章

  1. LOJ 数列分块入门 9 题解题报告

    LOJ 数列分块入门 9 题解题报告 \(\text{By DaiRuiChen007}\) I. 数列分块入门 1 题目大意 \(\text{Link}\) 维护一个长度为 \(n\) 的序列,支持 ...

  2. [Loj] 数列分块入门 1 - 9

    数列分块入门 1 https://loj.ac/problem/6277 区间加 + 单点查询 #include <iostream> #include <cstdio> #i ...

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

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

  4. loj 数列分块入门 5 7 8

    5 题意 给出一个长为\(n\)的数列,以及\(n\)个操作,操作涉及区间开方,区间求和. 思路 用\(tag\)记录这一块是否已全为\(1\). 除分块外,还可用 树状数组+并查集(链表) 或者 线 ...

  5. LOJ 数列分块入门系列

    目录 1.区间加+单点查 每个块维护tag,散的暴力改. code: #include<bits/stdc++.h> using namespace std; const int maxn ...

  6. LOJ 6277:数列分块入门 1(分块入门)

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

  7. LOJ #6285. 数列分块入门 9-分块(查询区间的最小众数)

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

  8. LOJ #6284. 数列分块入门 8-分块(区间查询等于一个数c的元素,并将这个区间的所有元素改为c)

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

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

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

  10. LOJ #6282. 数列分块入门 6-分块(单点插入、单点查询、数据随机生成)

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

随机推荐

  1. Datawhale组队学习_Task04:详读西瓜书+南瓜书第5章

    第5章 神经网络 5.1 神经元模型 基本定义:神经网络是由具有适应性的简单单元组成的广泛并行互联的网络,它的组织能够模拟生物神经系统对真实世界物体所做出的交互反应. M-P神经元模型:   在此模型 ...

  2. MAUI Blazor (Windows) App 动态设置窗口标题

    接着上一篇"如何为面向 Windows 的 MAUI Blazor 应用程序设置窗口标题?" Tips: 总所周知,MAUI 除了 Windows App 其他平台窗口是没有 Ti ...

  3. C# 操作IIS加强版(添加,删除,启动,暂停网站,默认页,绑定信息)

    C# 操作IIS加强版(添加,删除,启动,暂停网站,默认页,绑定信息) 主要功能如下 在本机的IIS创建Web网站 删除网站包括应用程序池 删除应用程序池 添加默认文档 删除默认文档 添加虚拟目录 删 ...

  4. Django框架F查询与Q查询(全面了解)

    一:F与Q查询 1.F查询的作用 能够帮助你直接获取到列表中某个字段对应的数据 注意: 在操作字符串类型的数据的时候, F不能够直接做到字符串的拼接 2.查询卖出书大于库存数的书籍 # 导入F查询 f ...

  5. 【openEuler系列】部署文件共享服务Samba

    个人名片: 对人间的热爱与歌颂,可抵岁月冗长 Github‍:念舒_C.ying CSDN主页️:念舒_C.ying 个人博客 :念舒_C.ying 目录 1 配置环境 2 配置软件安装源 3 安装文 ...

  6. table表格的合并

    如上图,实现单元格合并功能,不多说,直接上代码 一,添加    :span-method="objectSpanMethod" <el-table :key="ti ...

  7. VsCode搭建C语言运行环境以及终端乱码问题解决

    在VsCode中搭建C/C++运行环境需要先安装以下插件 1.安装c/c++插件 2.安装code runner插件 当然也可以安装一些其他的美化插件根据个人习惯,但是以上这两个是必装的. 安装好插件 ...

  8. day09-功能实现08

    家居网购项目实现08 以下皆为部分代码,详见 https://github.com/liyuelian/furniture_mall.git 19.功能18-添加家居到购物车 19.1需求分析/图解 ...

  9. 真正“搞”懂HTTP协议08之重定向

    我们知道,用来传输页面的协议就是HTTP协议,全称是超文本传输协议,而浏览器展示的页面则是用HTML编写的,HTML的全称则是超文本标记语言.你看,都叫做超文本,我在第一篇文章的时候也详细的聊过,超文 ...

  10. do while 出口條件循環