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

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

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

修改时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. asp.net core 3.x Identity

    一.前言 这方面的资料很多,重复的写没必要,但是最近一直在学习身份验证和授权相关东东,为了成体系还是写一篇,主要是从概念上理解identity系统. 参考:https://www.cnblogs.co ...

  2. java8 常用代码

    1. 使用java8 提取出 list 中 bean 的某一属性 public static void main(String[] args) { List<Student> stuLis ...

  3. SQL Server等待事件—PAGEIOLATCH_EX

    什么是PAGEIOLATCH_EX等待事件? 下面我们将对PAGEIOLATCH_EX等待事件的相关资料做一个简单的归纳.整理.关于PAGEIOLATCH_EX,官方文档的简单介绍如下: PAGEIO ...

  4. 「Flink」理解流式处理重要概念

    什么是流式处理呢? 这个问题其实我们大部分时候是没有考虑过的,大多数,我们是把流式处理和实时计算放在一起来说的.我们先来了解下,什么是数据流. 数据流(事件流) 数据流是无边界数据集的抽象 我们之前接 ...

  5. C语言关键词——register

    register修饰符暗示编译程序相应的变量将被频繁使用,如果可能的话,应将其保存在CPU的寄存器中,以加快其存储速度 例如:memcpy(des,src,i) { register char * d ...

  6. 剑指offer-面试题58_2-左旋转字符串-字符串

    /* 题目: 将字符串的前sep个字符转移到字符串尾部. */ /* 思路: 更好的方法: 先翻转前sep个字符,再翻转后面的字符,最后全体翻转. */ #include<iostream> ...

  7. intellji IDEA 2019版激活码(亲测可用 2019年10月14日08:53:54)

    MNQ043JMTU-eyJsaWNlbnNlSWQiOiJNTlEwNDNKTVRVIiwibGljZW5zZWVOYW1lIjoiR1VPIEJJTiIsImFzc2lnbmVlTmFtZSI6I ...

  8. springBoot 与 springMVC的区别

    springMVC 1.是基于Servlet的一个MVC框架(DispatcherServlet.ModelAndView.ViewResolver),解决web开发问题 缺点是 :配置复杂 要简化使 ...

  9. 洛谷题解 P1744 【采购特价商品】

    原题传送门 题目描述 中山路店山店海,成了购物狂爱与愁大神的"不归之路".中山路上有n(n<=100)家店,每家店的坐标均在-10000~10000之间.其中的m家店之间有通 ...

  10. 10、初识constexpr和常量表达式

    常量表达式:是指值不会改变并且在编译过程就能得到计算结果的表达式.显然字面值属于常量表达式,用于表达式初始化的const对象也是常量表达式. 1.判断一个变量是不是常量表达式 一个对象(表达式)是不是 ...