线段树离散化+区间更新——cf1179C好题
绝对是很好的题
把问题转化成当第i个询问的答案是数值x时是否可行
要判断值x是否可行,只要再将问题转化成a数组里>=x的值数量是否严格大于b数组里的>=x的值
那么线段树叶子结点维护对于值x的a数组里的合法数数量-b数组里的合法数数量,如果是正数即这个值可行
线段树维护区间最大值,然后询问最靠右的非负叶子下标
#include<bits/stdc++.h>
#include<vector>
using namespace std;
#define maxn 1000005 int Q,n,m,a[maxn],b[maxn],ans[maxn];
struct Query{int op,i,x;}q[maxn];
vector<int>v; #define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
int lazy[maxn<<],Max[maxn<<];
void pushdown(int rt){
if(lazy[rt]!=){
Max[rt<<]+=lazy[rt];
Max[rt<<|]+=lazy[rt];
lazy[rt<<]+=lazy[rt];
lazy[rt<<|]+=lazy[rt];
lazy[rt]=;
}
}
void pushup(int rt){
Max[rt]=max(Max[rt<<],Max[rt<<|]);
}
void update(int L,int R,int val,int l,int r,int rt){
if(L<=l && R>=r){
lazy[rt]+=val;
Max[rt]+=val;
return;
}
pushdown(rt);
int m=l+r>>;
if(L<=m)update(L,R,val,lson);
if(R>m)update(L,R,val,rson);
pushup(rt);
}
int query(int l,int r,int rt){
if(Max[rt]<=)return -;
if(l==r && Max[rt]>)return l;
pushdown(rt);
int m=l+r>>;
if(Max[rt<<|]>)
return query(rson);
else if(Max[rt<<]>)
return query(lson);
else return -;
} int main(){
cin>>n>>m;
for(int i=;i<=n;i++)scanf("%d",&a[i]),v.push_back(a[i]);
for(int i=;i<=m;i++)scanf("%d",&b[i]),v.push_back(b[i]);
cin>>Q;
for(int i=;i<=Q;i++){
scanf("%d%d%d",&q[i].op,&q[i].i,&q[i].x);
v.push_back(q[i].x);
} sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
int nn=v.size(); for(int i=;i<=n;i++){
int pos=lower_bound(v.begin(),v.end(),a[i])-v.begin()+;
update(,pos,,,nn,);
}
for(int i=;i<=m;i++){
int pos=lower_bound(v.begin(),v.end(),b[i])-v.begin()+;
update(,pos,-,,nn,);
} for(int i=;i<=Q;i++){
int op=q[i].op,p=q[i].i,x=q[i].x;
if(op==){//修改a的值
int pos=lower_bound(v.begin(),v.end(),a[p])-v.begin()+;
update(,pos,-,,nn,);
a[p]=x;
pos=lower_bound(v.begin(),v.end(),a[p])-v.begin()+;
update(,pos,,,nn,);
ans[i]=query(,nn,);
if(ans[i]>)
ans[i]=v[ans[i]-];
}
else {
int pos=lower_bound(v.begin(),v.end(),b[p])-v.begin()+;
update(,pos,,,nn,);
b[p]=x;
pos=lower_bound(v.begin(),v.end(),b[p])-v.begin()+;
update(,pos,-,,nn,);
ans[i]=query(,nn,);
if(ans[i]>)
ans[i]=v[ans[i]-];
}
}
for(int i=;i<=Q;i++)
cout<<ans[i]<<'\n';
}
线段树离散化+区间更新——cf1179C好题的更多相关文章
- hdu 1556:Color the ball(线段树,区间更新,经典题)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)To ...
- ZOJ 2301 Color the Ball 线段树(区间更新+离散化)
Color the Ball Time Limit: 2 Seconds Memory Limit: 65536 KB There are infinite balls in a line ...
- hdu 1698:Just a Hook(线段树,区间更新)
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total ...
- UVA 12436-Rip Van Winkle's Code(线段树的区间更新)
题意: long long data[250001]; void A( int st, int nd ) { for( int i = st; i \le nd; i++ ) data[i] = da ...
- hdu1698线段树的区间更新区间查询
Just a Hook Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Tota ...
- HDU 1556 Color the ball(线段树:区间更新)
http://acm.hdu.edu.cn/showproblem.php?pid=1556 题意: N个气球,每次[a,b]之间的气球涂一次色,统计每个气球涂色的次数. 思路: 这道题目用树状数组和 ...
- zoj3686(线段树的区间更新)
对线段树的区间更新有了初步的了解... A Simple Tree Problem Time Limit: 3 Seconds Memory Limit: 65536 KB Given a ...
- Color the ball (线段树的区间更新问题)
N个气球排成一排,从左到右依次编号为1,2,3....N.每次给定2个整数a b(a <= b),lele便为骑上他的“小飞鸽"牌电动车从气球a开始到气球b依次给每个气球涂一次颜色.但 ...
- Codeforces Gym 100733J Summer Wars 线段树,区间更新,区间求最大值,离散化,区间求并
Summer WarsTime Limit: 20 Sec Memory Limit: 256 MB 题目连接 http://acm.hust.edu.cn/vjudge/contest/view.a ...
随机推荐
- C语言指针和数组
#include <stdio.h> int main() { /********************************************* * * 指针和数组: * 定义 ...
- ElementUI的使用
一.安装 1.安装 在项目目录下执行 npm i element-ui -S 2.引入 在 main.js 中写入以下内容: import ElementUI from 'element-ui'; i ...
- TS-接口
接口 TS的核心原则之一是对值所具有的结构进行类型检测 接口初探 function printLabel(labelledObj: { label: string }) { console.log(l ...
- Spring boot热部署实战
1.介绍 在开发工程中,修改一点儿代码,想看效果就需要重新启动服务,这样会花费大量时间在重启服务上,通过devtools热部署可以大大减少重启服务的时间. 之所以能减少时间,是因为Spring Boo ...
- delphi 单元 MSHTML 之Ihtmldocument2
delphi : Ihtmldocument2接口的利用 MSHTML是微软公司的一个COM组件,该组件封装了HTML语言中的所有元素及其属性,穿越其供给的规范接口,能够访问指定网页的所有元素. MS ...
- thinkphp 表单合法性检测
在处理表单提交的数据的时候,建议尽量采用Think\Model类提供的create方法首先进行数据创建,然后再写入数据库. 大理石平台厂家 create方法在创建数据的同时,可以进行更为安全的处理操作 ...
- BZOJ 4596: [Shoi2016]黑暗前的幻想乡(容斥+Matrix_Tree)
传送门 解题思路 看到计数想容斥--\(from\) \(shadowice1984\)大爷.首先求出原图的生成树个数比较容易,直接上矩阵树定理,但这样会多算一点东西,会把\(n-2\)个公司的多算进 ...
- 其它课程中的python---3、numpy总结(非常全)
其它课程中的python---3.numpy总结(非常全) 一.总结 一句话总结: 学习方式应该是:听课+总结:-->找总结博客+再总结 需要始终记住:凭借,继承,复用 1.numpy的主要功能 ...
- 20140415 HOG 不同继承方式的访问特性 虚函数工作原理
1.HOG block重叠的好处 由于行人通常其形状可以视为柔体,人 的边缘位置不固定,而有一些移动,block 重叠后,一个边缘的梯度信息在两个相邻重叠的 block 中都能有所表达,这样即使边缘的 ...
- 转:CSS盒模型
W3C 组织建议把所有网页上的对像都放在一个盒(box)中,设计师可以通过创建定义来控制这个盒的属性,这些对像包括段落.列表.标题.图片以及层.盒模型主 要定义四个区域:内容(content).边框距 ...