题意

有\(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的更多相关文章

  1. codeforces 1180E Serge and Dining Room 线段树

    题目传送门 题目大意: 给出a序列和b序列,a序列为各种食物的价格,b序列为一列排着队的小朋友拥有的钱,小朋友依次购买食物,每个人都买自己能买的起的最贵的食物,买不起就离开队伍.给出q次操作,操作1是 ...

  2. E - Serge and Dining Room

    https://codeforces.com/contest/1180/problem/E 转载自他人博客 题意:有nn个菜肴,有mm个小朋友,每个菜肴的价格为aiai,每个小朋友有bibi元钱,小朋 ...

  3. Codeforces Round #569 题解

    Codeforces Round #569 题解 CF1179A Valeriy and Deque 有一个双端队列,每次取队首两个值,将较小值移动到队尾,较大值位置不变.多组询问求第\(m\)次操作 ...

  4. python爬虫学习(5) —— 扒一下codeforces题面

    上一次我们拿学校的URP做了个小小的demo.... 其实我们还可以把每个学生的证件照爬下来做成一个证件照校花校草评比 另外也可以写一个物理实验自动选课... 但是出于多种原因,,还是绕开这些敏感话题 ...

  5. 【Codeforces 738D】Sea Battle(贪心)

    http://codeforces.com/contest/738/problem/D Galya is playing one-dimensional Sea Battle on a 1 × n g ...

  6. 【Codeforces 738C】Road to Cinema

    http://codeforces.com/contest/738/problem/C Vasya is currently at a car rental service, and he wants ...

  7. 【Codeforces 738A】Interview with Oleg

    http://codeforces.com/contest/738/problem/A Polycarp has interviewed Oleg and has written the interv ...

  8. BZOJ 1711: [Usaco2007 Open]Dining吃饭

    1711: [Usaco2007 Open]Dining吃饭 Time Limit: 5 Sec  Memory Limit: 64 MBSubmit: 902  Solved: 476[Submit ...

  9. BZOJ 1226: [SDOI2009]学校食堂Dining

    1226: [SDOI2009]学校食堂Dining Time Limit: 10 Sec  Memory Limit: 259 MBSubmit: 730  Solved: 446[Submit][ ...

随机推荐

  1. Hibernate的入门Curd用法

    今天分享的是hibernate关系映射框架的入门用法 一:Hibernate简介 Hibernate是一个开放源代码的对象关系映射框架,它对JDBC进行了非常轻量级的对象封装,它将POJO与数据库表建 ...

  2. JFinal(2)JFinal 学习资料

    JFinal 学习资料 :http://pan.baidu.com/s/1hsOcQ0G 密码:7lq3 , jfinal社区收费会员内部部分资料,博主网络搜集而来

  3. 修改下jsp 默认编码,避免被坑

    修改下jsp 默认编码 ![](http://images2017.cnblogs.com/blog/1128666/201710/1128666-20171017143745927-14235413 ...

  4. 用Altium Designer16 绘制STM32开发板PCB 笔记

    第一部分 Altium designer 软件概括 一.安装:要安装英文版,只安装pcb design和importers/exporters 二.设置:dxp-preferences我们关心的是sy ...

  5. Oracle 11G 数据库迁移【expdp/impdp】

    转自:http://www.th7.cn/db/Oracle/201802/263773.shtml 0x01 环境 A 机器,操作系统 CentOS7.3,Oracle版本:11G,IP地址:192 ...

  6. 最全排序算法原理解析、java代码实现以及总结归纳

    算法分类 十种常见排序算法可以分为两大类: 非线性时间比较类排序:通过比较来决定元素间的相对次序,由于其时间复杂度不能突破O(nlogn),因此称为非线性时间比较类排序. 线性时间非比较类排序:不通过 ...

  7. pcntl

    <?php function my_pcntl_wait($childProcessCode){ $pid = pcntl_fork(); if($pid>0){ pcntl_wait($ ...

  8. jar下载及Maven配置整理

    Spring的各版本jar包下载地址http://repo.spring.io/release/org/springframework/spring/ springframework下载地址https ...

  9. SuperMemo method

    原文:https://www.supermemo.com/en/archives1990-2015/english/ol/sm2 别人的研究:http://wdxtub.lofter.com/post ...

  10. page页面403

    nginx 没有监听内网地址 必须要用域名访问