[LOJ] 分块九题 2
区间修改,查询区间第k大。
块内有序(另存),块内二分。
还是用vector吧,数组拷贝排序,下标搞不来。。
//Stay foolish,stay hungry,stay young,stay simple
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<cstdio>
#include<cctype>
#include<vector>
using namespace std;
const int MAXN=500005;
vector<int> b[1000];
inline int read_d(){
    int ret=0,f=1;char c;
    while(c=getchar(),!isdigit(c)) f=c=='-'?-1:1;
    while(isdigit(c)){
        ret*=10;ret+=c-'0';
        c=getchar();
    }
    return f*ret;
}
int n;
int a[MAXN],inc[MAXN],l[MAXN],
    r[MAXN],bl[MAXN];
int block,num;
void reset(int id){
    b[id].clear();
    for(int i=l[id];i<=r[id];i++) b[id].push_back(a[i]);
    sort(b[id].begin(),b[id].end());
} 
void build(){
    block=sqrt(n);
    block>>=1;
    num=n/block;
    if(n%block) num++;
    for(int i=1;i<=num;i++)
        l[i]=(i-1)*block+1,
        r[i]=i*block;
    r[num]=n;
    for(int i=1;i<=n;i++)
        bl[i]=(i-1)/block+1;
    for(int i=1;i<=num;i++) reset(i);
}
void updata(int x,int y,int w){
    if(bl[x]==bl[y]){
        for(int i=x;i<=y;i++)
            a[i]+=w;
        reset(bl[x]);
        return;
    }
    for(int i=x;i<=r[bl[x]];i++)
        a[i]+=w;
    reset(bl[x]);
    for(int i=bl[x]+1;i<=bl[y]-1;i++)
        inc[i]+=w;
    for(int i=l[bl[y]];i<=y;i++)
        a[i]+=w;
    reset(bl[y]);
}
int query(int x,int y,int w){
    int ret=0;
    if(bl[x]==bl[y]){
        for(int i=x;i<=y;i++)
            ret+=(a[i]+inc[bl[i]]<w);
        return ret;
    }
    for(int i=x;i<=r[bl[x]];i++)
        ret+=(a[i]+inc[bl[i]]<w);
    for(int i=l[bl[y]];i<=y;i++)
        ret+=(a[i]+inc[bl[i]]<w);
    int flag=0;
    for(int i=bl[x]+1;i<=bl[y]-1;i++){
        int tar=w-inc[i];
        ret+=lower_bound(b[i].begin(),b[i].end(),tar)-b[i].begin();
    }
    return ret;
}
int main(){
    n=read_d();
    for(int i=1;i<=n;i++) a[i]=read_d();
    build();
    for(int i=1;i<=n;i++){
        int q,x,y,z;
        q=read_d();
        x=read_d();
        y=read_d();
        z=read_d();
        if(q==0) updata(x,y,z);
        else printf("%d\n",query(x,y,z*z));
    }
    return 0;
}
												
											[LOJ] 分块九题 2的更多相关文章
- [LOJ] 分块九题 6
		
单点插入,单点查询. 优化了的链表. 链表老写错,干脆用vector,也不算慢. 注意链表退化的问题,及时(比如操作根号n次)就重新建块,实测速度可以提高一倍,这还是数据随机的情况,若涉及大量同一位置 ...
 - [LOJ] 分块九题 4
		
https://loj.ac/problem/6280 区间修改,区间求和. 本来线段树的活. //Stay foolish,stay hungry,stay young,stay simple #i ...
 - [LOJ] 分块九题 3
		
https://loj.ac/problem/6279 区间修改,区间查询前驱. TLE无数,我觉得这代码最精髓的就是block=1000. 谜一样的1000. 两个启示: 块内可以维护数据结构,比如 ...
 - [LOJ] 分块九题 1
		
https://loj.ac/problem/6277 区间修改,单点查询. //Stay foolish,stay hungry,stay young,stay simple #include< ...
 - [LOJ] 分块九题 8
		
区间查询数值+整体赋值 维护tag代表整个区间被赋成了tag[i] 用pushdown操作,而不是修改了再check. 不压缩代码了,调起来心累,长点有啥不好. //Stay foolish,stay ...
 - [LOJ] 分块九题 7
		
区间加法,区间乘法,单点查询. 洛谷线段树2 屡清加法乘法的关系,定义答案为 a*mut+add 对于整块: 新的乘w,mut和add都要乘w 新的加w,add加w //Stay foolish,st ...
 - [LOJ] 分块九题 5
		
区间开平方,区间查询. lazy标记改为区间是否全是1或者0,这样的区间是没有更新价值的. //Stay foolish,stay hungry,stay young,stay simple #inc ...
 - 数列分块总结——题目总版(hzwer分块九题及其他题目)(分块)
		
闲话 莫队算法似乎还是需要一点分块思想的......于是我就先来搞分块啦! 膜拜hzwer学长神犇%%%Orz 这九道题,每一道都堪称经典,强力打Call!点这里进入 算法简述 每一次考试被炸得体无完 ...
 - hzwer分块九题(暂时持续更新)
		
hzwer分块9题 分块1:区间加法,单点查询 Code #include<bits/stdc++.h> #define in(i) (i=read()) using namespace ...
 
随机推荐
- BZOJ3834:Solar Panels (分块)
			
题意 询问两个区间[smin,smax],[wmin,smax]中是否存在k的倍数,使得k最大 分析 将其转化成\([\frac{smin-1}k,\frac{smax}k],[\frac{wmin- ...
 - Template Code 无法使用 this.Host 报错
			
问题显示: Error 6 Compiling transformation: 'Microsoft.VisualStudio.TextTemplatingBED07DAE3B6FD53FA94701 ...
 - js同过url下载文件,调用另存为弹框
			
实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文件上传到项目的根目录下,并进行保存,随后根据此文件的路径进行下载到本地磁盘 实战中,项目将文 ...
 - web.xml中classpath*:与classpath:的区别
			
classpath对应src目录,该目录下的文件会在编译后被存放到WEB-INF文件夹下的classes目录. classpath:只会到你的class路径中查找配置文件,对于多个同名的配置文件,只会 ...
 - IDEA中创建HBASE工程
			
IntelliJ IDEA+maven的HBase开发环境搭建 hbase 配置(hbase-site.xml)和基本使用 16010端口可以查看Hbase web信息
 - AtCoder Grand Contest 016  B - Colorful Hats
			
题目传送门:https://agc016.contest.atcoder.jp/tasks/agc016_b 题目大意: 有\(N\)只猫,每只猫头上带着一个帽子,帽子有颜色,现在告诉你每只猫能看到的 ...
 - Android 暗码表
			
转自: http://blog.csdn.net/jiangshide/article/details/8192834 不同手机厂商可能会隐藏或修改暗码,部份暗码要谨慎使用,因为可能令手机失去原有的功 ...
 - hibernate   Day1   案例代码
			
1.创建Person类 package com.icss.pojo; public class Person { private int uid; private String uname; priv ...
 - jmeter(二十二)jmeter测试Java请求
			
目的:对Java程序进行测试 目录 一.核心步骤 二.实例 三.JMeter Java Sampler介绍 四.自带Java Request Sampler 一.核心步骤 1.创建一个Java工程: ...
 - getAttribute()方法的第二个参数
			
对于一个img元素,我们想获取它的src属性时可以有两种方式: 1.xxx.getAttribute("src") 2.直接通过xxx.src获取属性值 在src的属性值为相对路径 ...