题意:支持区间加,询问区间中元素排名

维护两个域。一个域维护原序列,一个域维护快内排序序列。

每次修改后更新快内排序序列。

修改时O(sqrt(n)log(sqrt(n)))

询问时O(sqrt(n)log(sqrt(n)))

大概是这个量级吧

 #include <bits/stdc++.h>
using namespace std; int bl[],bla,a[],a0[],b[],bi[],n;
int t1,t2,t3,t4; void init() {
bla=sqrt(n);
for (int i=;i<=n;i++)
bl[i]=(i-)/bla+,
bi[i]=(i-)%bla+;
for (int l=;l<=n;l+=bla) {
for(int i=bl[l]*bla-bla+;i<=bl[l]*bla;i++)
a[i]=a0[i];
sort(a+bl[l]*bla-bla+,a+bl[l]*bla+);
}
} void add(int l,int r,int c){
if(bl[l]==bl[r]) {
for(int i=l;i<=r;i++)
a0[i]+=c;
for(int i=bl[l]*bla-bla+;i<=bl[l]*bla;i++)
a[i]=a0[i];
sort(a+bl[l]*bla-bla+,a+bl[l]*bla+);
}
else {
for(int i=l;i<=bl[l]*bla;i++)
a0[i]+=c;
for(int i=bl[l]*bla-bla+;i<=bl[l]*bla;i++)
a[i]=a0[i];
sort(a+bl[l]*bla-bla+,a+bl[l]*bla+);
for(int i=bl[r]*bla-bla+;i<=r;i++)
a0[i]+=c;
for(int i=bl[r]*bla-bla+;i<=bl[r]*bla;i++)
a[i]=a0[i];
sort(a+bl[r]*bla-bla+,a+bl[r]*bla+);
for(int i=bl[l]+;i<bl[r];i++)
b[i]+=c;
}
} int query(int l,int r,long long c){
int ans=;
if(bl[l]==bl[r]) {
for(int i=l;i<=r;i++)
ans+=(a0[i]<c-b[bl[l]]);
}
else {
for(int i=l;i<=bl[l]*bla;i++)
ans+=(a0[i]<c-b[bl[l]]);
for(int i=bl[r]*bla-bla+;i<=r;i++)
ans+=(a0[i]<c-b[bl[r]]);
for(int i=bl[l]+;i<bl[r];i++)
ans+=lower_bound(a+i*bla-bla+,a+i*bla+,c-b[i])-(a+i*bla-bla+);
}
return ans;
} void printblock(){
/*for(int i=1;i<=n/bla+(n%bla)?1:0;i++) {
printf("block %d : %d\n",i,b[i]);
printf(" a0: ");
for(int j=1;j<=bla;j++) printf("%d ",a0[i*bla-bla+j]);
printf("\n");
printf(" a: ");
for(int j=1;j<=bla;j++) printf("%d ",a[i*bla-bla+j]);
printf("\n");
}*/
} int main(){
ios::sync_with_stdio(false);
cin>>n;
for(int i=;i<=n;i++)
cin>>a0[i];
init();
printblock();
for(int i=;i<=n;i++) {
cin>>t1>>t2>>t3>>t4;
if(t1==){
add(t2,t3,t4);
}
else {
printf("%d\n",query(t2,t3,t4*t4));
}
printblock();
}
}

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

  1. loj6277 数列分块入门题1

    裸题分块. #include <bits/stdc++.h> using namespace std; ],b[],n,m,t1,t2,t3,t4,sq; int main(){ ios: ...

  2. [LOJ6278]数列分块入门 2

    题目大意: 给你一个长度为$n(n\leq 50000)$的序列$A$,支持进行以下两种操作: 1.将区间$[l,r]$中所有数加上$c$: 2.询问区间$[l,r]$中小于$c^2$的数的个数.思路 ...

  3. [loj6278]数列分块入门2

    做法1 以$K$为块大小分块,并对每一个块再维护一个排序后的结果,预处理复杂度为$o(n\log K )$ 区间修改时将整块打上标记,散块暴力修改并归并排序,单次复杂度为$o(\frac{n}{K}+ ...

  4. 题解——loj6278 数列分块入门2 (分块)

    查询小于k的值 注意lower_bound一定要减去查找的起始位置得到正确的位置 调了快两天 淦 #include <cstdio> #include <algorithm> ...

  5. 数列分块入门九题(三):LOJ6283~6285

    Preface 最后一题我一直觉得用莫队是最好的. 数列分块入门 7--区间乘法,区间加法,单点询问 还是很简单的吧,比起数列分块入门 7就多了个区间乘. 类似于线段树,由于乘法的优先级高于加法,因此 ...

  6. 数列分块入门九题(二):LOJ6280~6282

    Preface 个人感觉这中间的三题是最水的没有之一 数列分块入门 4--区间加法,区间求和 这个也是很多数据结构完爆的题目线段树入门题,但是练分块我们就要写吗 修改还是与之前类似,只不过我们要维护每 ...

  7. 数列分块入门九题(一):LOJ6277~6279

    Preface 分块,一个神奇的暴力算法.可以把很多\(O(n^2)\)的数据结构题的暴力优化到常数极小的\(O(n\sqrt n)\).当一些毒瘤题无法用线段树,主席树,平衡树,树状数组...... ...

  8. LOJ6285 数列分块入门9(分块)

    昨天对着代码看了一晚上 然后今天终于在loj上过了 数列分块入门9题撒花★,°:.☆( ̄▽ ̄)/$:.°★ . 然后相当玄学 块的大小调成\(\sqrt{n}\)会TLE,改成150就过了 啧 然后就 ...

  9. 数列分块入门1-9 By hzwer

    声明 持续更新,因为博主也是正在学习分块的知识,我很菜的,菜的抠$jio$ 写在前面 分块是个很暴力的算法,但却比暴力优秀的多,分块算法的时间复杂度一般是根号的,他的主要思想是将一个长度是$n$的数列 ...

随机推荐

  1. Maven jar包冲突

    在pom.xml中引入一个依赖,maven会自动导入这个依赖的依赖,方便的同时也会造成jar包冲突: (1)A.B都依赖C,我们导入A(自动导入C).B(自动导入C),maven自动导入了2个C,到底 ...

  2. MongoDB集群负载不均衡问题定位及解决

    1.问题描述 这是一套运行在腾讯云上的MongoDB 3.6版本集群,共5个分片,每片规格是6核16GB. 在压测的过程中,发现第3个分片的CPU使用率长时间高达96%,其它4个分片的CPU使用率都没 ...

  3. 在香蕉派的树莓派系统上配置 Syncthing 自启动

    在香蕉派的树莓派系统上配置 Syncthing 自启动 —— 魏刘宏 2020 年 1 月 19 日 首先做个名词解释,” 香蕉派” 是国内一款山寨树莓派的硬件产品,” 树莓派系统” 指的是”rasp ...

  4. 如何在Idea中使用Git将项目代码上传到码云

    参考链接:https://blog.csdn.net/zzybbh/article/details/88172140

  5. JAVA中级开发应该掌握的小知识点

    一.悲观锁.乐观锁的区别: 悲观锁:一段执行逻辑加上悲观锁,不同线程同时执行,只有一个线程可以执行,其他线程在入口处等待,直到锁被释放.乐观锁:一段执行逻辑加上乐观锁,不同线程同时执行,可以同时进入执 ...

  6. java基础--------arraylist(动态数组)和linkedlist(双向链表)的区别

    arraylist使用数组存储数据,所以这样存储的数据根据索引查询的数据速度快,但是新增或者删除元素时需要设计到位移操作,所以比较慢. linkedlist使用双向链表方式存储数据,每个元素都记录前后 ...

  7. idea中创建maven的Javaweb工程并进行配置

    学完maven后,可以创建maven的javaweb工程,在创建完成后还需要一些配置,下面来说下具体步骤,在这里我创建的是一个模块,创建web项目的方式和创建模块一样 1.创建一个模块,点new-Mo ...

  8. opencv —— createTrackbar、getTrackbarPos 滑动条的创建和使用

    创建滑动条:createTrackbar 函数 createTrackbar 函数用于创建一个可以调整数值的滑动条,并将滑动条附加在指定的窗口上. int createTrackbar(const s ...

  9. vue.config.js添加路径别名

    在组件库中添加配置文件后其它文件需要引用它,此时想到利用路径的别名比较方便,相当于缩写了,请看下面的添加过程: (一)在vue.config.js文件中添加的内容如粗体字体所示: const path ...

  10. Spring MVC 定时任务注解说明

    一.注解说明. Spring 自带的定时任务执行@Scheduled注解,可以定时的.周期性的执行一些任务.查看@Scheduled的注解可以看到有以下三种: 1.1 String cron() de ...