#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstring>
#include<algorithm>
using namespace std;
const int maxn=;
typedef long long ll;
int n,m;
struct bit{
ll tr[maxn];
void add(int pos,ll v){
for(int i=pos;i<maxn;i+=i&(-i))tr[i]+=v;
}
ll qs(int pos){
ll res=;
for(int i=pos;i;i-=i&(-i))res+=tr[i];
return res;
}
}A,B;
void update(int l,int r,ll v){
A.add(r,v*r);A.add(l-,-v*(l-));
B.add(r,v);B.add(l-,-v);
}
ll query(int l,int r){
ll tt1=(B.qs(n+)-B.qs(r))*r+A.qs(r);
ll tt2=(B.qs(n+)-B.qs(l-))*(l-)+A.qs(l-);
return tt1-tt2;
}
struct ope{
int id,op,a,b;
ll c;
}t[maxn],tmp1[maxn],tmp2[maxn],tt[maxn];
ll C;
int ans[maxn];
void solve(int l,int r,int L,int R){//L和R是当前二分的答案,l和r是当前区间;
if(l>r)return;
//cout<<l<<' '<<r<<endl;
if(L==R){
for(int i=l;i<=r;++i){
if(t[i].op==)ans[t[i].id]=L;
}
return;
}
int mid=L+R>>;
int t1=,t2=;//注意这里设局部变量;
for(int i=l;i<=r;++i){
if(t[i].op==){
if(t[i].c>mid){
update(t[i].a,t[i].b,);
tmp2[++t2]=t[i];
}
else tmp1[++t1]=t[i];
}
else{
ll cc=query(t[i].a,t[i].b);
//cout<<t[i].a<<' '<<t[i].b<<' '<<cc<<endl;
if(cc>=t[i].c)tmp2[++t2]=t[i];
else {
tmp1[++t1]=t[i];tmp1[t1].c-=cc;
}
}
}
for(int i=l;i<=r;++i){
if(t[i].op==){
if(t[i].c>mid)update(t[i].a,t[i].b,-);
}
}
for(int i=;i<=t1;++i)t[l+i-]=tmp1[i];
for(int i=;i<=t2;++i)t[l+i+t1-]=tmp2[i];
//cout<<l<<' '<<r<<endl;
/*cout<<l<<' '<<l+t1-1<<' '<<L<<' '<<mid<<endl;
cout<<l+t1<<' '<<r<<' '<<mid+1<<' '<<R<<endl;
cout<<endl;*/
solve(l,l+t1-,L,mid);solve(l+t1,r,mid+,R);
}
int main(){
cin>>n>>m;
for(int i=;i<=m;++i){
t[i].id=i;
scanf("%d%d%d%lld",&t[i].op,&t[i].a,&t[i].b,&t[i].c);
t[i].a++;t[i].b++;
C=max(C,t[i].c);
}
for(int i=;i<=m;++i)tt[i]=t[i];
solve(,m,,C);
for(int i=;i<=m;++i)
if(tt[i].op==)printf("%d\n",ans[i]);
return ;
}

bzoj3110(整体二分)的更多相关文章

  1. 【BZOJ3110】K大数查询(整体二分)

    [BZOJ3110]K大数查询(整体二分) 题面 BZOJ 题解 看了很久整体二分 一直不知道哪里写错了 ... 又把树状数组当成线段树区间加法来用了.. 整体二分还是要想清楚在干什么: 我们考虑第\ ...

  2. BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组

    欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...

  3. 【BZOJ3110】K大数查询(权值线段树套线段树+标记永久化,整体二分)

    题意:有N个位置,M个操作.操作有两种,每次操作 如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...

  4. 【BZOJ3110】[ZJOI2013]K大数查询(整体二分)

    题目: BZOJ3110 分析: 整体二分模板题-- 先明确一下题意:每个位置可以存放多个数,第一种操作是"加入 (insert) "一个数而不是"加上 (add) &q ...

  5. 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  6. [BZOJ3110][ZJOI2013]K大数查询(整体二分)

    BZOJ Luogu sol 整体二分,其实很简单的啦. 对所有询问二分一个答案mid,把所有修改操作中数字大于mid的做一个区间覆盖(区间加1) 查询就是区间查询 然后左右分一分即可 注意是第k大 ...

  7. BZOJ3110:[ZJOI2013]K大数查询(整体二分)

    Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...

  8. 【BZOJ-3110】K大数查询 整体二分 + 线段树

    3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec  Memory Limit: 512 MBSubmit: 6265  Solved: 2060[Submit][Sta ...

  9. 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改

    题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...

随机推荐

  1. 解决Oracle数据库空间不足问题

    //查询表空间的大小以及文件路径地址select tablespace_name, file_id, file_name,round(bytes/(1024*1024),0) total_space ...

  2. SpringCloud Hystrix熔断之线程池

    服务熔断 雪崩效应:是一种因服务提供者的不可用导致服务调用者的不可用,并导致服务雪崩的过程. 服务熔断:当服务提供者无法调用时,会通过断路器向调用方直接返回一个错误响应,而不是长时间的等待,避免服务雪 ...

  3. Ubuntu---gcc && g++

    摘要:今天用 gcc 编译 c++ 代码,发现会报错:std::cout  这个函数无定义,所以决定查一下原因,在这里总结一下,虽然以后回头看一定会觉得太菜,但是新手期还是总要经历的一个阶段,所以就记 ...

  4. poj 1141 Brackets Sequence 区间dp,分块记录

    Brackets Sequence Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 35049   Accepted: 101 ...

  5. [leetcode]66. Plus One加一

    Given a non-empty array of digits representing a non-negative integer, plus one to the integer. The ...

  6. 理解javascript中的立即执行函数(function(){})()

    之前看了好多代码,都有用到这种函数的写法,但是都没认真的去想为什么会这样写,今天开始想学习下jquery的源码,发现jquery也是使用这种方式,用(function(window, undefine ...

  7. SQL Server 2000服务器安装剖析

    一.情况说明 sql server 2000以前的版本,例如7.0一般不存在多个版本,只有标准版跟桌面版,用户如果不清楚该装什么版本的话,可按安装上的安装先决条件指示安装,一般在WIN2000 服务器 ...

  8. freemarker使用

    获得FreeMarker 官网:http://freemarker.org/ 中文帮助文档:https://sourceforge.net/projects/freemarker/files/chin ...

  9. Python读取excel表的数据

    from openpyxl.reader.excel import load_workbook #读取xlsx文件def readExcelFile(path): dic={} #打开文件 file= ...

  10. sqoop mysql导入hive 数值类型变成null的问题分析

    问题描述:mysql通过sqoop导入到hive表中,发现有个别数据类型为int或tinyint的列导入后数据为null.设置各种行分隔符,列分隔符都没有效果. 问题分析:hive中单独将有问题的那几 ...