LOJ-6279-数列分块入门3(分块, 二分)
链接:
题意:
给出一个长为 的数列,以及 个操作,操作涉及区间加法,询问区间内小于某个值 的前驱(比其小的最大元素)。
思路:
同样的分块加二分,只不过是更新值
代码:
#include <iostream>
#include <cstdio>
#include <cstring>
#include <vector>
//#include <memory.h>
#include <queue>
#include <set>
#include <map>
#include <algorithm>
#include <math.h>
#include <stack>
#include <string>
#include <assert.h>
#include <iomanip>
#define MINF 0x3f3f3f3f
using namespace std;
typedef long long LL;
const int MAXN = 1e5+10;
int a[MAXN];
int Rank[MAXN], Tag[MAXN];
vector<int> Vec[MAXN];
int part, n;
void Re(int pos)
{
Vec[pos].clear();
for (int i = (pos-1)*part+1;i <= pos*part;i++)
Vec[pos].push_back(a[i]);
sort(Vec[pos].begin(), Vec[pos].end());
}
void Update(int l, int r, int c)
{
for (int i = l;i <= min(Rank[l]*part, r);i++)
a[i] += c;
Re(Rank[l]);
if (Rank[l] != Rank[r])
{
for (int i = max(l, (Rank[r]-1)*part+1);i <= r;i++)
a[i] += c;
Re(Rank[r]);
}
for (int i = Rank[l]+1;i <= Rank[r]-1;i++)
{
Tag[i] += c;
}
}
int Query(int l, int r, int c)
{
int res = -1;
for (int i = l;i <= min(Rank[l]*part, r);i++)
{
if (a[i]+Tag[Rank[l]] < c)
res = max(res, a[i]+Tag[Rank[l]]);
}
if (Rank[l] != Rank[r])
{
for (int i = max((Rank[r]-1)*part+1, l);i <= r;i++)
{
if (a[i]+Tag[Rank[r]] < c)
res = max(res, a[i]+Tag[Rank[r]]);
}
}
for (int i = Rank[l]+1;i <= Rank[r]-1;i++)
{
int pos = lower_bound(Vec[i].begin(), Vec[i].end(), c-Tag[i])-Vec[i].begin();
if (pos >= 1)
res = max(res, Vec[i][pos-1]+Tag[i]);
}
return res;
}
int main()
{
scanf("%d", &n);
part = sqrt(n);
for (int i = 1;i <= n;i++)
scanf("%d", &a[i]);
for (int i = 1;i <= n;i++)
{
Rank[i] = (i-1)/part+1;
Vec[Rank[i]].push_back(a[i]);
}
for (int i = 1;i <= Rank[n];i++)
sort(Vec[i].begin(), Vec[i].end());
int op, l, r, c;
for (int i = 1;i <= n;i++)
{
scanf("%d %d %d %d", &op, &l, &r, &c);
if (op == 0)
Update(l, r, c);
else
printf("%d\n", Query(l, r, c));
}
return 0;
}
LOJ-6279-数列分块入门3(分块, 二分)的更多相关文章
- LOJ #6279. 数列分块入门 3-分块(区间加法、查询区间内小于某个值x的前驱(比其小的最大元素))
#6279. 数列分块入门 3 内存限制:256 MiB时间限制:1500 ms标准输入输出 题目类型:传统评测方式:文本比较 上传者: hzwer 提交提交记录统计测试数据讨论 3 题目描述 给 ...
- LOJ 6279 数列分块入门3
嗯... 题目链接:https://loj.ac/problem/6279 这道题在分块的基础上用vc数组记录,然后最后分三块,两边暴力枚举找前驱,中间lower_bound找前驱. AC代码: #i ...
- LOJ#6279. 数列分块入门 3
区间加值还是正常的操作,查找前驱的时候用lower_bound查找,然后范围所在位置的值 #include<map> #include<set> #include<cti ...
- LOJ.6284.数列分块入门8(分块)
题目链接 \(Description\) 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c. \(Solution\) 模拟一些数据可以发现,询问后 ...
- LibreOJ 6279 数列分块入门 3(分块+排序)
题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x ...
- LOJ.6281.数列分块入门5(分块 区间开方)
题目链接 int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过. #include <cmath> #include <cstdio> ...
- LibreOJ 6277 数列分块入门 1(分块)
题解:感谢hzwer学长和loj让本蒟蒻能够找到如此合适的入门题做. 这是一道非常标准的分块模板题,本来用打标记的线段树不知道要写多少行,但是分块只有这么几行,极其高妙. 代码如下: #include ...
- LibreOJ 6278 数列分块入门 2(分块)
题解:非常高妙的分块,每个块对应一个桶,桶内元素全部sort过,加值时,对于零散块O(sqrt(n))暴力修改,然后暴力重构桶.对于大块直接整块加.查询时对于非完整块O(sqrt(n))暴力遍历.对 ...
- [Libre 6281] 数列分块入门 5 (分块)
水一道入门分块qwq 题面:传送门 开方基本暴力.. 如果某一个区间全部都开成1或0就打上标记全部跳过就行了 因为一个数开上个四五六次就是1了所以复杂度能过233~ code: //By Menteu ...
随机推荐
- 2019-03-19 Fiori学习笔记 Fiori开发环境
Fiori 文档 :https://experience.sap.com/fiori-design-web/ Fiori 登录:https://cloudplatform.sap.com/index. ...
- Exceptionless安装的一些坑
零.参考网站: https://www.cnblogs.com/zgshi/p/9152196.html 博客园上介绍.基本上介绍了如何安装和放到IIS上面. https://www.cnblogs. ...
- 通过NGINX location实现一个域名访问多个项目
location ~ \.php$ { root /home/webroot; //此目录下有多个项目 project1 ,project2... fastcgi_pass $php_upstr ...
- C++随笔(1)——关于C++11中的线程创建,join和detach
主要是和之前的博文有关,之前在这里有一部分代码是通过创建新的进程来应对新的用户请求的,但是基本没怎么解释怎么用的,所以这里做点小笔记. join 首先引入的库: #include <thread ...
- XSS的简单过滤和绕过
XSS的简单过滤和绕过 程序猿用一些函数将构成xss代码的一些关键字符给过滤了.但是,道高一尺魔高一丈,虽然过滤了,还是可以尝试进行过滤绕过,以达到XSS攻击的目的. 最简单的是输入<scrip ...
- C语言循环队列
#include<stdio.h> #include<stdlib.h> #include<string.h> //循环队列 typedef struct { in ...
- A1139-引爆炸弹 计蒜客 bfs剪枝
题目链接 https://nanti.jisuanke.com/t/A1139 在一个 n \times mn×m 的方格地图上,某些方格上放置着炸弹.手动引爆一个炸弹以后,炸弹会把炸弹所在的行和列上 ...
- 【HTTP】三、HTTP状态保持机制(Cookie和Session)
前面我们提到HTTP协议的特点:无连接.无状态.无连接带来的时间开销随着HTTP/1.1引入了持久连接的机制得到了解决.现在来关注其"无状态"的特点. 所谓的无状态,就是指 ...
- 小程序图片预览 wx.previewImage
list: [ 'http://img5.imgtn.bdimg.com/it/u=3300305952,1328708913&fm=26&gp=0.jpg', 'http://i ...
- CF 1178E Archaeology 题解
题面 这道题竟然是E?还是洛谷中的黑题? wow~!! 于是就做了一下: 然后一下就A了:(这并不代表想的容易,而是写的容易) 这道题就是骗人的!! 什么manacher,什么回文自动机,去靠一边站着 ...