题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x的解,完整的块用二分查找,其实还可以用set维护,出于对最暴力AC的尊敬,我并没有这么写.照样过了.

代码如下:

#include<cmath>
#include<cstdio>
#include<vector>
#include<cstring>
#include<iostream>
#include<algorithm>
using namespace std; int tag[],a[],lump[];
int sz,n;
vector<int> v[]; void reset(int x)
{
v[x].clear();
for(int i=(x-)*sz+; i<=min(x*sz,n); i++)
{
v[x].push_back(a[i]);
}
sort(v[x].begin(),v[x].end());
} void add(int l,int r,int c)
{
for(int i=l; i<=min(lump[l]*sz,r); i++)
{
a[i]+=c;
}
reset(lump[l]);
if(lump[l]!=lump[r])
{
for(int i=(lump[r]-)*sz+; i<=r; i++)
{
a[i]+=c;
}
reset(lump[r]);
}
for(int i=lump[l]+; i<=lump[r]-; i++)
{
tag[i]+=c;
}
} int query(int l,int r,int x)
{
int ans=-;
for(int i=l; i<=min(lump[l]*sz,r); i++)
{
if(a[i]+tag[lump[i]]>ans&&x>a[i]+tag[lump[i]])
{
ans=a[i]+tag[lump[i]];
}
}
if(lump[l]!=lump[r])
{
for(int i=(lump[r]-)*sz+; i<=r; i++) //!!!
{
if(tag[lump[i]]+a[i]>ans&&x>a[i]+tag[lump[i]])
{
ans=a[i]+tag[lump[i]];
}
}
}
for(int i=lump[l]+; i<=lump[r]-; i++)
{
int gg=x-tag[i];
int pos=lower_bound(v[i].begin(),v[i].end(),gg)-v[i].begin();
if(pos!=)
{
int w=v[i][pos-];
if(w+tag[i]>ans&&w+tag[i]<x)
{
ans=w+tag[i];
}
} }
return ans;
} int main()
{
int opt,l,r,c;
scanf("%d",&n);
sz=sqrt(n);
for(int i=; i<=n; i++)
{
lump[i]=(i-)/sz+;
}
for(int i=; i<=n; i++)
{
scanf("%d",&a[i]);
v[lump[i]].push_back(a[i]);
}
for(int i=; i<=lump[n]; i++)
{
sort(v[i].begin(),v[i].end());
}
for(int i=; i<=n; i++)
{
scanf("%d%d%d%d",&opt,&l,&r,&c);
if(!opt)
{
add(l,r,c);
}
else
{
printf("%d\n",query(l,r,c));
}
}
}

LibreOJ 6279 数列分块入门 3(分块+排序)的更多相关文章

  1. LibreOj 6279数列分块入门 3 练习了一下set

    题目链接:https://loj.ac/problem/6279 推荐博客:https://blog.csdn.net/qq_36038511/article/details/79725027 这题区 ...

  2. LibreOJ 6277 数列分块入门 1(分块)

    题解:感谢hzwer学长和loj让本蒟蒻能够找到如此合适的入门题做. 这是一道非常标准的分块模板题,本来用打标记的线段树不知道要写多少行,但是分块只有这么几行,极其高妙. 代码如下: #include ...

  3. LibreOJ 6280 数列分块入门 4(分块区间加区间求和)

    题解:分块的区间求和比起线段树来说实在是太好写了(当然,复杂度也高)但这也是没办法的事情嘛.总之50000的数据跑了75ms左右还是挺优越的. 比起单点询问来说,区间询问和也没有复杂多少,多开一个su ...

  4. LibreOJ 6278 数列分块入门 2(分块)

     题解:非常高妙的分块,每个块对应一个桶,桶内元素全部sort过,加值时,对于零散块O(sqrt(n))暴力修改,然后暴力重构桶.对于大块直接整块加.查询时对于非完整块O(sqrt(n))暴力遍历.对 ...

  5. LibreOJ 6281 数列分块入门 5(分块区间开方区间求和)

    题解:区间开方emmm,这马上让我想起了当时写线段树的时候,很显然,对于一个在2^31次方以内的数,开方7-8次就差不多变成一了,所以我们对于每次开方,如果块中的所有数都为一了,那么开方也没有必要了. ...

  6. [Libre 6281] 数列分块入门 5 (分块)

    水一道入门分块qwq 题面:传送门 开方基本暴力.. 如果某一个区间全部都开成1或0就打上标记全部跳过就行了 因为一个数开上个四五六次就是1了所以复杂度能过233~ code: //By Menteu ...

  7. LOJ.6284.数列分块入门8(分块)

    题目链接 \(Description\) 给出一个长为n的数列,以及n个操作,操作涉及区间询问等于一个数c的元素,并将这个区间的所有元素改为c. \(Solution\) 模拟一些数据可以发现,询问后 ...

  8. LOJ.6281.数列分块入门5(分块 区间开方)

    题目链接 int内的数(也不非得是int)最多开方4.5次就变成1了,所以还不是1就暴力,是1就直接跳过. #include <cmath> #include <cstdio> ...

  9. [Libre 6282] 数列分块入门 6 (分块)

    原题:传送门 code: //By Menteur_Hxy #include<cstdio> #include<iostream> #include<algorithm& ...

随机推荐

  1. TCP报文送达确认ACK

    TCP数据包中的序列号(Sequence Number)不是以报文段来进行编号的,而是将连接生存周期内传输的所有数据当作一个字节流,序列号就是整个字节流中每个字节的编号.一个TCP数据包中包含多个字节 ...

  2. Intellij idea run dashboard面板

    IDEA下 Spring Boot显示 Run Dashboard面板 Run Dashboard面板允许您一次浏览和管理多个运行项目,左侧是运行配置表及其状态,右侧是详细信息和特定于应用程序的信息, ...

  3. java写基础的九九乘法表

    package com.aaa; public class Xox { public static void main(String[] args) { for (int i = 1; i <= ...

  4. Python print format() 格式化内置函数

    Python2.6 开始,新增了一种格式化字符串的函数 str.format(),它增强了字符串格式化的功能. 基本语法是通过 {} 和 : 来代替以前的 % . format 函数可以接受不限个参数 ...

  5. 前端自动化工具 -- gulp https://angularjs.org/

    gulp是基于流的前端自动化构建工具. gulp是基于stream流的形式,也就是前一个函数(工厂)制造出结果,提供后者使用. 同样的,也是包括基本用法和各插件的使用. 二.基本用法--插件使用 gu ...

  6. PCB上 如何显示 汉字

    原理图上有汉字,那如何在PCB上显示汉子呢  ?  而不至于显示乱码 按如下操作  ,双击乱码  ,进入设置模式 设置好后,显示的字体样式.

  7. JavaScript笔记——基础知识(二)

    Function类型 函数function不需要返回类型(不是没有返回值),参数也不需要指定类型,更为特殊的是函数竟然是个类,可以通过new出来 var box= new Function('num1 ...

  8. 分布式爬虫搭建系列 之三---scrapy框架初用

    第一,scrapy框架的安装 通过命令提示符进行安装(如果没有安装的话) pip install Scrapy 如果需要卸载的话使用命令为: pip uninstall Scrapy 第二,scrap ...

  9. 如何将serialport接收的字符串转换成十六进制数c#

    关注 baihe_591 baihe_591 本版等级:   #1 得分:0回复于: 2008-06-02 09:44:00 Byte[] byte=new Byte[1];byte=0xf1;por ...

  10. elastic(10) 基本查询

    # 指定index名以及type名的搜索 GET /library/books/_search?q=title:elasticsearch # 指定index名没有type名的搜索 GET /libr ...