题目传送门

题目大意:

  给出a序列和b序列,a序列为各种食物的价格,b序列为一列排着队的小朋友拥有的钱,小朋友依次购买食物,每个人都买自己能买的起的最贵的食物,买不起就离开队伍。给出q次操作,操作1是修改食物的价格,操作2是修改小朋友的钱,每次操作后询问当小朋友买完之后,能买到的最贵的食物的价格是多少,没有食物了就输出-1.

思路:

  首先,小朋友的顺序对最终答案没有任何影响,因为如果两个小朋友能买两个东西,这两个小朋友无论怎么换,都是能买的了的。

  其次,对于一个价格为x的物品,如果有一个钱大于等于x的小朋友,就可以买走这个物品。如果我们把价格想象成一条数轴,那么物品就是1,小朋友就是-1,价格或者钱就是坐标轴的位置,这道题就转化成了求最大的后缀和大于等于1的下标。

  最后,我们用线段树来维护这个值,注意用线段树维护最大后缀和时,在查询时要注意后面的区间的影响。

#include<bits/stdc++.h>
#define clr(a,b) memset(a,b,sizeof(a))
using namespace std;
typedef long long ll;
const int maxn=;
int n,m,q;
int sum[maxn<<],maxx[maxn<<];
int a[maxn],b[maxn];
void update(int o,int l,int r,int p,int val){
if(l==r){
sum[o]+=val;
maxx[o]+=val;
return;
}
int mid=(l+r)>>;
if(p<=mid)update(o<<,l,mid,p,val);
else update(o<<|,mid+,r,p,val);
sum[o]=sum[o<<]+sum[o<<|];
maxx[o]=max(maxx[o<<|],maxx[o<<]+sum[o<<|]);
//这里的每一个maxx,都是对应的 区间最大后缀和 但不是整根数轴的最大后缀和。
}
struct node{
int max,sum;
};
int query(int o,int l,int r,node tep){
if(l==r){
return l;
}
int mid=(l+r)>>;
node tep2;
tep2.sum=tep.sum+sum[o<<|];
tep2.max=maxx[o<<|]+tep.sum;//将 标号为o这段区间的后面一段(o+1)的影响合并到o区间中
if(tep2.max>){
return query(o<<|,mid+,r,tep);
}
else {
return query(o<<,l,mid,tep2);
}
}
int main(){
while(cin>>n>>m){
clr(sum,),clr(maxx,);
for(int i=;i<=n;i++){
scanf("%d",&a[i]);
update(,,maxn-,a[i],);
}
for(int i=;i<=m;i++){
scanf("%d",&b[i]);
update(,,maxn-,b[i],-);
}
cin>>q;
while(q--){
int op,pos,val;
scanf("%d%d%d",&op,&pos,&val);
if(op==){
update(,,maxn-,a[pos],-);
update(,,maxn-,a[pos]=val,);
}else{
update(,,maxn-,b[pos],);
update(,,maxn-,b[pos]=val,-);
} if(maxx[]<=)puts("-1");
else printf("%d\n",query(,,maxn-,{,})); }
}
}

最新文章

  1. java 锁2
  2. 【Java每日一题】20161207
  3. spring和hibernate整合时无法自动建表
  4. oracle数据库的乱码问题解决方案
  5. 不能向Github提交某一類型的文件
  6. DM9000网卡的基本工作原理
  7. 51nod 最长递增子序列
  8. phpcms v9更改后台文章排序的方法
  9. sitemesh网页布局
  10. maven 将第三方jar包转成maven的jar包
  11. 毕业设计——Django邮件发送功能实现及问题记录
  12. Filter 快速开始 异步Servlet 异步请求 AsyncContext 异步线程 异步派发 过滤器拦截
  13. NHibernate查询优化的相关资料
  14. Golang知识图谱
  15. sqlserver 临时表、表变量、CTE的比较
  16. HTML5-form表单
  17. Unity3D之AR开发(一)
  18. php取得当前时间函数
  19. JAVA 非对称加密工具
  20. 51nod 1010 只包含因子2 3 5的数 打表

热门文章

  1. python 出现indentationError:expected an indented block!
  2. react-loadable路由懒加载
  3. 虚拟机安装VMware Tools, 安装gcc编译器
  4. Hexo使用攻略-添加分类及标签
  5. Spring IOC源码分析(二):Bean工厂体系结构设计
  6. C#WinForm 窗体单例模式 反射单例
  7. python颜色
  8. Django(九) xadmin全局配置
  9. centos 7 中安装Oracle 12c
  10. Charles使用技巧