Codeforces 1180E Serge and Dining Room
题意:
有\(n\)个菜肴,有\(m\)个小朋友,每个菜肴的价格为\(a_i\),每个小朋友有\(b_i\)元钱,小朋友从\(1 \rightarrow m\)依次购买菜肴,当第\(i\)个小朋友轮到的时候,他会购买他买的起的最贵的,否则就离开。
要求支持修改第\(i\)个菜肴的价格和修改第\(i\)个小朋友的拥有的钱数的两种操作,每次操作完成给出\(m\)个小朋友买完后剩下的最贵的菜肴的价格是多少。
思路:
假设价格大于\(x\)的\(y\)个菜肴都被买了,那么显然拥有钱数\(\geq x\)的小朋友个数一定要\(\geq y\),显然如何购买是无所谓的。
那么就在\(a_i\)处减一,\(b_i\)处加一,每次询问一个最大的\(l\)使得\([l, \infty]\)的最大后缀和\(> 0\)。
线段树维护即可。
代码:
#include <bits/stdc++.h>
using namespace std;
#define N 1000010
#define M 1000000
int n, m, q, a[N], b[N];
struct SEG {
struct node {
int sum, Max;
node() {
sum = Max = 0;
}
node(int sum, int Max) : sum(sum), Max(Max) {}
node operator + (const node &other) const {
node res = node();
res.sum = sum + other.sum;
res.Max = max(other.Max, Max + other.sum);
return res;
}
}t[N << 2];
void init() {
memset(t, 0, sizeof t);
}
void update(int id, int l, int r, int x, int v) {
if (l == r) {
t[id].sum += v;
t[id].Max += v;
return;
}
int mid = (l + r) >> 1;
if (x <= mid) update(id << 1, l, mid, x, v);
else update(id << 1 | 1, mid + 1, r, x, v);
t[id] = t[id << 1] + t[id << 1 | 1];
}
int query(int id, int l, int r, node tmp) {
if (l == r) {
return l;
}
int mid = (l + r) >> 1;
node tmp2 = t[id << 1 | 1] + tmp;
if (tmp2.Max > 0) {
return query(id << 1 | 1, mid + 1, r, tmp);
} else {
return query(id << 1, l, mid, tmp2);
}
}
}seg;
int main() {
while (scanf("%d%d", &n, &m) != EOF) {
seg.init();
for (int i = 1; i <= n; ++i) {
scanf("%d", a + i);
seg.update(1, 1, M, a[i], 1);
}
for (int i = 1; i <= m; ++i) {
scanf("%d", b + i);
seg.update(1, 1, M, b[i], -1);
}
scanf("%d", &q);
int op, x, v;
while (q--) {
scanf("%d%d%d", &op, &x, &v);
switch(op) {
case 1 :
seg.update(1, 1, M, a[x], -1);
seg.update(1, 1, M, a[x] = v, 1);
break;
case 2 :
seg.update(1, 1, M, b[x], 1);
seg.update(1, 1, M, b[x] = v, -1);
break;
default :
assert(0);
}
if (seg.t[1].Max <= 0) {
puts("-1");
} else {
printf("%d\n", seg.query(1, 1, M, SEG::node(0, 0)));
}
}
}
return 0;
}
Codeforces 1180E Serge and Dining Room的更多相关文章
- codeforces 1180E Serge and Dining Room 线段树
题目传送门 题目大意: 给出a序列和b序列,a序列为各种食物的价格,b序列为一列排着队的小朋友拥有的钱,小朋友依次购买食物,每个人都买自己能买的起的最贵的食物,买不起就离开队伍.给出q次操作,操作1是 ...
- E - Serge and Dining Room
https://codeforces.com/contest/1180/problem/E 转载自他人博客 题意:有nn个菜肴,有mm个小朋友,每个菜肴的价格为aiai,每个小朋友有bibi元钱,小朋 ...
- Codeforces Round #569 题解
Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...
- python爬虫学习(5) —— 扒一下codeforces题面
上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...
- 【Codeforces 738D】Sea Battle(贪心)
http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...
- 【Codeforces 738C】Road to Cinema
http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...
- 【Codeforces 738A】Interview with Oleg
http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...
- BZOJ 1711: [Usaco2007 Open]Dining吃饭
1711: [Usaco2007 Open]Dining吃饭 Time Limit: 5 Sec Memory Limit: 64 MBSubmit: 902 Solved: 476[Submit ...
- BZOJ 1226: [SDOI2009]学校食堂Dining
1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec Memory Limit: 259 MBSubmit: 730 Solved: 446[Submit][ ...
随机推荐
- React-intl相关使用介绍
React-intl用于国际化react组件,提供react组件和api来格式化日期.数字,字符等等.其中一个很重要的功能是实现文本翻译,将你所做的中文版应用所有文字转为英文. 关于配置什么的,请参照 ...
- ABP的UnitOfWork内部SaveChanges无效
应用层一个AppService默认是一个工作单元,默认是开启的,默认是事务的.因为应用服务方法应该是原子的且一般都会使用数据库. 但是有些情况需要关闭工作单元 1.AppService有多个操作需要操 ...
- Java Web-Filter and listener
Java Web-Filter and listener Filter:过滤器 概述 拦截请求,完成一些特殊的功能. 过滤器的作用: 一般用于完成通用的一些操作,例如登录验证(通过session来判断 ...
- ubantu18.04 配置nginx与uwsgi(前后端分离)
ubantu18.04 配置nginx与uwsgi 一.首先先安装nginx静态服务 先更新 sudo apt-get update 1.安装gcc g++的依赖库 sudo apt-get in ...
- ArrayList和CopyOnWriteArrayList(转载)
这篇文章的目的如下: 了解一下ArrayList和CopyOnWriteArrayList的增删改查实现原理 看看为什么说ArrayList查询快而增删慢? CopyOnWriteArrayList为 ...
- ASE19 团队项目 alpha 阶段 Frontend 组 scrum9 记录
本次会议于11月14日,11:30 在微软北京西二号楼13158,持续15分钟. 与会人员:Jingyi Xie, Jiaqi Xu, Jingwei Yi, Hanyue Tu 请假: Ziwei ...
- oracle 的普通语法
select sysdate from dual -- 时间 select SYS_GUID() from dual --唯一
- http服务详解(3)
https https:http over sslSSL会话的简化过程 (1) 客户端发送可供选择的加密方式,并向服务器请求证书 (2) 服务器端发送证书以及选定的加密方式给客户端 (3) 客户端取得 ...
- Linux学习笔记(十)shell基础:历史命令、命令补全、输出重定向、输出重定向
一.历史命令 history [选项] [历史命令保存文件] -c 清空历史命令 -w 吧缓存中的历史命令写入历史命令保存文件~/.bash_history中 系统会默认将上次注销登录(正确退出)之前 ...
- powerlink的Windows-DEMO生成笔记
资料准备: 1.Visual studio 2010 2.Cmake 3.Powerlink 2.7.1源码 具体下载请到相关页面去获取. 新版的powerlink分为两个部分: 1.协议栈 2.应用 ...