博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Problem B: 取石子
阅读量:5171 次
发布时间:2019-06-13

本文共 2143 字,大约阅读时间需要 7 分钟。

  • 转换成一个数在(0,X + Y)的加减问题
  • 考虑一种使用线段树处理的方法, 维护前缀最大值, 前缀最小值, 前缀和, 然后查询的时候先询问右区间是否会同时碰到上下界, 会的话左区间无用直接递归右区间, 否则的话递归左区间, 然后右区间只会碰到上边界或者下边界, 分两种情况讨论即可
#include
#include
#include
#include
#include
#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_pairusing 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

你可能感兴趣的文章
理解裸机部署过程ironic
查看>>
Django 组件-ModelForm
查看>>
zabbix 二 zabbix agent 客户端
查看>>
大数据分析中,有哪些常见的大数据分析模型?
查看>>
如何防止Arp攻击
查看>>
ClassList 标签的用法
查看>>
小细节:Java中split()中的特殊分隔符 小数点
查看>>
【编程思想】【设计模式】【行为模式Behavioral】中介者模式Mediator
查看>>
后端接口时间戳或者随机数的作用
查看>>
tomcat docBase 和 path
查看>>
java默认语法、EL、JSTL表达式,JSTL和struts Tag标签的使用总结
查看>>
Vue笔记:使用 axios 发送请求
查看>>
富文本编辑器 - RichEditor
查看>>
java webcontroller访问时报415错误
查看>>
qcow2、raw、vmdk等镜像格式
查看>>
Jzoj5455【NOIP2017提高A组冲刺11.6】拆网线
查看>>
特定字符序列的判断(1028)
查看>>
华为面试
查看>>
平衡二叉树(AVL Tree)
查看>>
【BZOJ3295】[Cqoi2011]动态逆序对 cdq分治
查看>>