bzoj3110(整体二分)
#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(整体二分)的更多相关文章
- 【BZOJ3110】K大数查询(整体二分)
[BZOJ3110]K大数查询(整体二分) 题面 BZOJ 题解 看了很久整体二分 一直不知道哪里写错了 ... 又把树状数组当成线段树区间加法来用了.. 整体二分还是要想清楚在干什么: 我们考虑第\ ...
- BZOJ3110 [Zjoi2013]K大数查询 树套树 线段树 整体二分 树状数组
欢迎访问~原文出处——博客园-zhouzhendong 去博客园看该题解 题目传送门 - BZOJ3110 题意概括 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位 ...
- 【BZOJ3110】K大数查询(权值线段树套线段树+标记永久化,整体二分)
题意:有N个位置,M个操作.操作有两种,每次操作 如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是 ...
- 【BZOJ3110】[ZJOI2013]K大数查询(整体二分)
题目: BZOJ3110 分析: 整体二分模板题-- 先明确一下题意:每个位置可以存放多个数,第一种操作是"加入 (insert) "一个数而不是"加上 (add) &q ...
- 【BZOJ3110】【整体二分+树状数组区间修改/线段树】K大数查询
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c 如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- [BZOJ3110][ZJOI2013]K大数查询(整体二分)
BZOJ Luogu sol 整体二分,其实很简单的啦. 对所有询问二分一个答案mid,把所有修改操作中数字大于mid的做一个区间覆盖(区间加1) 查询就是区间查询 然后左右分一分即可 注意是第k大 ...
- BZOJ3110:[ZJOI2013]K大数查询(整体二分)
Description 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位 ...
- 【BZOJ-3110】K大数查询 整体二分 + 线段树
3110: [Zjoi2013]K大数查询 Time Limit: 20 Sec Memory Limit: 512 MBSubmit: 6265 Solved: 2060[Submit][Sta ...
- 【bzoj3110】[Zjoi2013]K大数查询 整体二分+树状数组区间修改
题目描述 有N个位置,M个操作.操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c.如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数 ...
随机推荐
- java 安装教程
https://www.cnblogs.com/xuyangblog/p/5455381.html
- Mysql JSON字段提取某一个属性值的函数
mysql从5.7开始才支持JSON_EXTRACT等 JSON相关的函数, 项目里用到的mysql是5.6的,需要提取JSON字段里某一个属性值进行统计, 自己写了一个笨的提取方法: CREATE ...
- [Solution] 821. Shortest Distance to a Character
Difficulty: Easy Problem Given a string S and a character C, return an array of integers representin ...
- JAVA跨域CORS
写了一个前端vue调用后端Java的接口,报“Access-Control-Allow-Origin”问题.
- step_by_step_用python爬点磁力链接
爬点东西 -Scrapy 今天是小年,团聚的日子,想想这一年中发生过大大小小的事,十分感慨. 言归正传: 吐槽了一些话,没事的时候一个单身老男人就只能上上网打发打发时间,后来我发现一个网站比较好,但是 ...
- jq动画设置图片抽奖(修改效果版)
效果:点击开始,图片转动,按钮显示"停止",点击停止,选出中奖号码,,最后一个数字停止时,按钮变为"again",点击"again"开始转动 ...
- C# 微信网页授权多域名解决
在做微信开发的时候,会遇到这样的场景:一个公众号,会有多个业务:官网.论坛.商城等等 微信网页授权域名 目前最多可以填写两个!!!,那么问题来了?这应该怎么办? 答案就是: 做一个中转服务! 域名1: ...
- ListBox设置背景色无效的问题。 listview类似
<Style TargetType="{x:Type ListBoxItem}"> <Setter Property="Template"&g ...
- apache-tomcat 部分中文.html .jsp 连接 404问题
修改文件到 自己的安装目录:\apache-tomcat-7.0.79\conf 添加 Connector URIEncoding="utf-8" <Connector ...
- CSS样式内容
CSS代码规范:尽量不要在标签内使用样式代码. .css文档内部声明不换行可以节省内存. 谨记: 常犯的错误是.html文档和.css样式表都写好了,但总会忘记插入样式表. 1.字体的样式 2. ...