• 转换成一个数在(0,X + Y)的加减问题
  • 考虑一种使用线段树处理的方法, 维护前缀最大值, 前缀最小值, 前缀和, 然后查询的时候先询问右区间是否会同时碰到上下界, 会的话左区间无用直接递归右区间, 否则的话递归左区间, 然后右区间只会碰到上边界或者下边界, 分两种情况讨论即可
#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#include<iostream>
#define M 500010
#define ls now << 1
#define rs now << 1 | 1
#define lson l, mid, now << 1
#define rson mid + 1, r, now << 1 | 1
#define ll long long
#define mmp make_pair
using namespace std;
int read() {int nm = 0, f = 1;char c = getchar();for(; !isdigit(c); c = getchar()) if(c == '-') f = -1;for(; isdigit(c); c = getchar()) nm = nm * 10 + c - '0';return nm * f;
}
int n, q, x, y, z;
ll sum[M << 2], minn[M << 2], maxx[M << 2];void pushup(int now) {sum[now] = sum[ls] + sum[rs];minn[now] = min(minn[ls], sum[ls] + minn[rs]);maxx[now] = max(maxx[ls], sum[ls] + maxx[rs]);
}void modify(int l, int r, int now, int pl, int v) {if(l > pl || r < pl) return;if(l == r) {sum[now] = v;minn[now] = min(v, 0);maxx[now] = max(v, 0);return;}int mid = (l + r) >> 1;modify(lson, pl, v), modify(rson, pl, v);pushup(now);
}
ll s;ll merge(ll v, int now) {if(v + maxx[now] > s) return s - maxx[now] + sum[now];if(v + minn[now] < 0) return sum[now] - minn[now];return v + sum[now];
}ll query(int l, int r, int now, ll v) {if(l == r) return max(min(s, sum[now] + v), 0ll);int mid = (l + r) >> 1;if(maxx[rs] - minn[rs] > s) return query(rson, 0);else return merge(query(lson, v), rs);
}int main() {
//  freopen("stone1.in", "r", stdin);n = read(), q = read();x = read(), y = read();for(int i = 1; i <= n; i++) {z = read();if(i % 2 == 0) z = -z;modify(1, n, 1, i, z);}while(q--) {int op = read();if(op == 1) x = read();else if(op == 2) y = read();else {int pl = read(), v = read();if(pl % 2 == 0) v = -v;modify(1, n, 1, pl, v);}s = x + y;cout << query(1, n, 1, x) << "\n";}return 0;
}

转载于:https://www.cnblogs.com/luoyibujue/p/10713334.html

Problem B: 取石子相关推荐

  1. 梦工厂实验室 取石子之fans 博弈

    问题 D: 取石子之fans 时间限制: 1 Sec  内存限制: 64 MB 提交: 57  解决: 26 [提交][状态][讨论版] 题目描述 Yougth和Hrdv玩一个游戏,拿出n个石子摆成一 ...

  2. NYOJ 23 取石子

    取石子(一) 时间限制:3000 ms  | 内存限制:65535 KB 难度:2 描述 一天,TT在寝室闲着无聊,和同寝的人玩起了取石子游戏,而由于条件有限,他/她们是用旺仔小馒头当作石子.游戏的规 ...

  3. 【hdu 1527】取石子游戏

    Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others) Total Submission(s) ...

  4. POJ 1067 取石子游戏

    取石子游戏 Time Limit: 1000MS   Memory Limit: 10000K Total Submissions: 40917   Accepted: 13826 Descripti ...

  5. hdu 2516 取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  6. HDU2516 取石子游戏【博弈】

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Subm ...

  7. POJ1067 HDU1527 取石子游戏【博弈】

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  8. java取石子_HDU 1527 取石子游戏

    取石子游戏 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Subm ...

  9. 取石子游戏,程序员用博弈论教你如何必胜

    1.游戏规则 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子(至少取1个). 每次有两种不同的取法,规则如下: 1.一是可以在任意的一堆中取走任意多的石子:2.二是可以在两堆中同时取走相同 ...

  10. hdu1527取石子游戏(威佐夫博奕)

    Problem Description 有两堆石子,数量任意,可以不同.游戏开始由两个人轮流取石子.游戏规定,每次有两种不同的取法,一是可以在任意的一堆中取走任意多的石子:二是可以在两堆中同时取走相同 ...

最新文章

  1. 小技巧: 从开始菜单进行网络搜索
  2. 首颗“机器心”成功植入近四十年后,人造心脏终于又迎来颠覆变革
  3. 局域网共享问题解决方法!
  4. JAVA SE学习day_11:集合的相关应用、增强型for循环、foreach方法、数组与集合的相互转换
  5. mysql实验的好处_用好UniProt 数据库,蛋白实验不用愁
  6. VB中判断空的几种方法,Null, Missing, Empty, Nothing, vbNullString区别
  7. Python内置函数filter()和匿名函数lambda解析
  8. tensorflow随笔-条件语句-tf.case
  9. grafana导出pdf监控日报
  10. matlab复杂网络仿真,matlab在复杂网络上的应用
  11. 64位win10系统无法安装.Net framework3.5的两种解决方法【转】
  12. 苹果 Mac 上不显示外置硬盘?9 个必须尝试的修复方法
  13. html 收藏网站 功能实现,网站常用的收藏网站实现代码
  14. 基于Python实现的网上购书功能的网站后端
  15. onhashchange事件--司徒正美
  16. 用excel制作双层饼图_教程:用Excel做饼图之复合饼图与双层饼图(2)
  17. NetBeans IDE使用方法
  18. 第四届传智杯 小卡与质数(java实现)
  19. 权限维持:DSRM 域控权限维持
  20. 捕获数据包(Wireshark)

热门文章

  1. html实现圆形计时器特效,js css3圆形的时分秒计时器动画特效
  2. VS2010 C# 调用Web Service
  3. Oracle 临时表、数据闪回、系统常用表、及常用操作
  4. Android 横竖屏切换问题
  5. Android 四大组件 之 活动(Activity)
  6. 基于计算机 中学数学教学,计算机辅助中学数学教学的研究
  7. linux 设置固定网络转发_关于 Linux 网络,你必须知道这些
  8. 小D课堂 - 零基础入门SpringBoot2.X到实战_第8节 数据库操作之整合Mybaties和事务讲解_32..SpringBoot2.x持久化数据方式介绍...
  9. 小D课堂 - 零基础入门SpringBoot2.X到实战_第4节 Springboot2.0单元测试进阶实战和自定义异常处理_20、SpringBoot2.x配置全局异常实战...
  10. java基础 第十一章(多态、抽象类、接口、包装类、String)