查询小于k的值

注意lower_bound一定要减去查找的起始位置得到正确的位置

调了快两天

#include <cstdio>
#include <algorithm>
#include <cstring>
#include <cmath>
using namespace std;
int a[],b[],belong[],tag[],num,sz,n;
void calbe(int n){
for(int i=;i<=n;i++){
belong[i]=(i-)/sz+;
}
}
void reset(int l,int r){
for(int i=l;i<=r;i++)
b[i]=a[i];
sort(b+l,b+r+);
}
void update(int l,int r,int w){
int xl=belong[l];
int xr=belong[r];
for(int i=l;i<=min(r,sz*xl);i++){
a[i]+=w;
}
reset((xl-)*sz+,min(xl*sz,n));
if(xl!=xr){
for(int i=(xr-)*sz+;i<=r;i++)
a[i]+=w;
reset((xr-)*sz+,min(xr*sz,n));
}
for(int i=xl+;i<=xr-;i++)
tag[i]+=w; }
int query(int l,int r,int w){
// printf("qw=%d\n",w);
int xl=belong[l];
int xr=belong[r];
// printf("ln=%d || rn=%d\n",xl,xr);
int ans=;
for(int i=l;i<=min(r,sz*xl);i++){
// printf("tag=%d || qsw=%d\n",tag[xl],w-tag[xl]);
if(a[i]<w-tag[xl]){
ans++;
// printf("a[%d] = %d || w=%d ||tag=%d\n",i,a[i],w,tag[xl]);
}
}
if(xl!=xr){
for(int i=(xr-)*sz+;i<=r;i++){
// printf("tag=%d || qsw=%d\n",tag[xr],w-tag[xr]);
if(a[i]<w-tag[xr]){
ans++;
// printf("a[%d] = %d || w=%d ||tag=%d\n",i,a[i],w,tag[xl]);
}
}
}
for(int i=xl+;i<=xr-;i++){
int pos = lower_bound(b+sz*(i-)+,b+sz*i+,w-tag[i])-(b+(i-)*sz+);
// printf("pos/%d:%d st=%d \n",i,pos,(i-1)*sz+1);
ans+=pos;
}
return ans;
}
int main(){
scanf("%d",&n);
sz=sqrt(n);
calbe(n);
num=n/sz;
if(n%sz)
num++;
// printf("sz=%d\n",sz);
// for(int i=1;i<=n;i++)
// printf("%d ",belong[i]);
for(int i=;i<=n;i++)
scanf("%d",&a[i]);
for(int i=;i<=num;i++){
reset((i-)*sz+,min(sz*i,n));
}
// for(int i=1;i<=num;i++){
// printf("block:%d\nB: ",i);
// for(int j=(i-1)*sz+1;j<=i*sz;j++)
// printf("%d ",b[j]+tag[i]);
// printf("\nA: ");
// for(int j=(i-1)*sz+1;j<=i*sz;j++)
// printf("%d ",a[j]+tag[i]);
// printf("\n\n");
// }
for(int i=;i<=n;i++){
int opt,l,r,c;
scanf("%d %d %d %d",&opt,&l,&r,&c);
if(opt==){
update(l,r,c);
// for(int i=1;i<=num;i++){
// printf("block:%d tag:%d\nB: ",i,tag[i]);
// for(int j=(i-1)*sz+1;j<=i*sz;j++)
// printf("%d ",b[j]+tag[i]);
// printf("\nA: ");
// for(int j=(i-1)*sz+1;j<=i*sz;j++)
// printf("%d ",a[j]+tag[i]);
// printf("\n\n");
// }
}
else{
printf("%d\n",query(l,r,c*c));
}
}
return ;
}

题解——loj6278 数列分块入门2 (分块)的更多相关文章

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

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

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

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

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

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

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

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

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

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

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

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

  7. LibreOJ 6279 数列分块入门 3(分块+排序)

    题解:自然是先分一波块,把同一个块中的所有数字压到一个vector中,将每一个vector进行排序.然后对于每一次区间加,不完整的块加好后暴力重构,完整的块直接修改标记.查询时不完整的块暴力找最接近x ...

  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. pyspider 示例

    数据存放目录: C:\Users\Administrator\data 升级版(可加载文章内所有多层嵌套的图片标签) #!/usr/bin/env python # -*- encoding: utf ...

  2. 20165215 2017-2018-2 《Java程序设计》第九周学习总结

    20165215 2017-2018-2 <Java程序设计>第九周学习总结 教材学习内容总结 URL类 URL 类是 java.net 包中的一个重要的类,使用 URL 创建对象的应用程 ...

  3. go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE

    go语言,golang学习笔记1 官网下载安装,中文社区,开发工具LiteIDE Go语言是谷歌2009发布的专门针对多处理器系统应用程序的编程进行了优化,使用Go编译的程序可以媲美C或C++代码的速 ...

  4. jenkins2

    创建工程 Eclipse创建工程:注意工程的路径,不是/home/svn,这个是svn的根目录. 是工程上传的路径,Apple直接下面有pom文件. 创建工程,创建一个任务就是创建一个工程. 需要注意 ...

  5. linux test

    some test .在登录Linux时,一个具有唯一进程ID号的shell将被调用,这个ID是什么(b) A.NID B.PID C.UID C.CID .下面那个用户存放用户密码信息(b) A./ ...

  6. SQL SERVER镜像配置(包含见证服务器)

    镜像简介   重要说明:保持数据库镜像运行.如果您关闭数据库镜像,则必须执行完全备份并还原数据库以重建数据库镜像.   一. 简介 SQL SERVER 2005镜像基于日志同步,可良好实现故障转移. ...

  7. spark与kafka集成进行实时 nginx代理 这种sdk埋点 原生日志实时解析 处理

    日志格式202.108.16.254^A1546795482.600^A/cntv.gif?appId=3&areaId=8213&srcContId=2535575&area ...

  8. easyui dialog 表单提交,弹框初始化赋值,dialog实现

    //定义弹框html<div id="delete" class="easyui-dialog" title="Delete" dat ...

  9. 数据分析之Matplotlib

    一.Matplotlib的基础知识     Matplotlib中的基本图表包括的元素     •x轴和y轴 axis     水平和垂直的轴线     •x轴和y轴刻度 tick     刻度标示坐 ...

  10. 如何通过 Vue+Webpack 来做通用的前端组件化架构设计

    目录:   1. 架构选型     2. 架构目录介绍     3. 架构说明     4. 招聘消息 目前如果要说比较流行的前端架构哪家强,屈指可数:reactjs.angularjs.emberj ...