P3097 [USACO13DEC]最优挤奶Optimal Milking
P3097 [USACO13DEC]最优挤奶Optimal Milking
题意简述:给定n个点排成一排,每个点有一个点权,多次改变某个点的点权并将最大点独立集计入答案,输出最终的答案
感谢@zht467 提供翻译
错误日志: 又双叒叕没开long long
Solution
考虑线段树维护
只有四种情况, 选择左端点与否 \(*\) 选择右端点与否
共四种情况
维护这四个便可以上推了
void pushup(LL id){
tree[id].ans[0][0] = max(tree[lid].ans[0][0] + tree[rid].ans[1][0], tree[lid].ans[0][1] + tree[rid].ans[0][0]);
tree[id].ans[0][1] = max(tree[lid].ans[0][0] + tree[rid].ans[1][1], tree[lid].ans[0][1] + tree[rid].ans[0][1]);
tree[id].ans[1][0] = max(tree[lid].ans[1][0] + tree[rid].ans[1][0], tree[lid].ans[1][1] + tree[rid].ans[0][0]);
tree[id].ans[1][1] = max(tree[lid].ans[1][0] + tree[rid].ans[1][1], tree[lid].ans[1][1] + tree[rid].ans[0][1]);
}
Code
#include<iostream>
#include<cstdio>
#include<queue>
#include<cstring>
#include<algorithm>
#include<climits>
#define LL long long
using namespace std;
LL RD(){
LL out = 0,flag = 1;char c = getchar();
while(c < '0' || c >'9'){if(c == '-')flag = -1;c = getchar();}
while(c >= '0' && c <= '9'){out = out * 10 + c - '0';c = getchar();}
return flag * out;
}
const LL maxn = 80019;
LL num, na, a[maxn];
#define lid (id << 1)
#define rid (id << 1) | 1
struct seg_tree{
LL l, r;
LL ans[2][2];//0为选,1为不选
}tree[maxn << 2];
void pushup(LL id){
tree[id].ans[0][0] = max(tree[lid].ans[0][0] + tree[rid].ans[1][0], tree[lid].ans[0][1] + tree[rid].ans[0][0]);
tree[id].ans[0][1] = max(tree[lid].ans[0][0] + tree[rid].ans[1][1], tree[lid].ans[0][1] + tree[rid].ans[0][1]);
tree[id].ans[1][0] = max(tree[lid].ans[1][0] + tree[rid].ans[1][0], tree[lid].ans[1][1] + tree[rid].ans[0][0]);
tree[id].ans[1][1] = max(tree[lid].ans[1][0] + tree[rid].ans[1][1], tree[lid].ans[1][1] + tree[rid].ans[0][1]);
}
void build(LL id, LL l, LL r){
tree[id].l = l, tree[id].r = r;
if(l == r){
tree[id].ans[1][1] = a[l];
return ;
}
LL mid = (l + r) >> 1;
build(lid, l, mid), build(rid, mid + 1, r);
pushup(id);
}
void update(LL id, LL val, LL l, LL r){
if(tree[id].l == l && tree[id].r == r){
tree[id].ans[1][1] = val;
return ;
}
LL mid = (tree[id].l + tree[id].r) >> 1;
if(mid < l)update(rid, val, l, r);
else if(mid >= r)update(lid, val, l, r);
pushup(id);
}
LL sum;
int main(){
num = RD(), na = RD();
for(LL i = 1;i <= num;i++)a[i] = RD();
build(1, 1, num);
for(LL i = 1;i <= na;i++){
LL p = RD(), val = RD();
update(1, val, p, p);
LL ans = max(tree[1].ans[0][0], tree[1].ans[0][1]);
ans = max(ans, tree[1].ans[1][0]);
ans = max(ans, tree[1].ans[1][1]);
sum += ans;
}
printf("%lld\n", sum);
return 0;
}
P3097 [USACO13DEC]最优挤奶Optimal Milking的更多相关文章
- 洛谷P3097 - [USACO13DEC]最优挤奶Optimal Milking
Portal Description 给出一个\(n(n\leq4\times10^4)\)个数的数列\(\{a_n\}(a_i\geq1)\).一个数列的最大贡献定义为其中若干个不相邻的数的和的最大 ...
- [P3097] [USACO13DEC] [BZOJ4094] 最优挤奶Optimal Milking 解题报告(线段树+DP)
题目链接:https://www.luogu.org/problemnew/show/P3097#sub 题目描述 Farmer John has recently purchased a new b ...
- P3097 [USACO13DEC]最优挤奶(线段树优化dp)
盲猜dp系列... 题意:给定序列,选了i就不能选与i相邻的两个,求最大值,带修改 蒟蒻在考场上10min打完以为只有两种情况的错解...居然能骗一点分... 先讲下当时的思路吧. f[i][0/1] ...
- 题解 最优的挤奶方案(Optimal Milking)
最优的挤奶方案(Optimal Milking) 时间限制: 1 Sec 内存限制: 128 MB 题目描述 农场主 John 将他的 K(1≤K≤30)个挤奶器运到牧场,在那里有 C(1≤C≤20 ...
- Optimal Milking POJ - 2112 (多重最优匹配+最小费用最大流+最大值最小化 + Floyd)
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 19347 Accepted: 690 ...
- 【BZOJ4094】[Usaco2013 Dec]Optimal Milking 线段树
[BZOJ4094][Usaco2013 Dec]Optimal Milking Description Farmer John最近购买了N(1 <= N <= 40000)台挤奶机,编号 ...
- bzoj 4094: [Usaco2013 Dec]Optimal Milking
4094: [Usaco2013 Dec]Optimal Milking Description Farmer John最近购买了N(1 <= N <= 40000)台挤奶机,编号为1 . ...
- Optimal Milking 分类: 图论 POJ 最短路 查找 2015-08-10 10:38 3人阅读 评论(0) 收藏
Optimal Milking Time Limit: 2000MS Memory Limit: 30000K Total Submissions: 13968 Accepted: 5044 Case ...
- POJ 2112 Optimal Milking (二分 + floyd + 网络流)
POJ 2112 Optimal Milking 链接:http://poj.org/problem?id=2112 题意:农场主John 将他的K(1≤K≤30)个挤奶器运到牧场,在那里有C(1≤C ...
随机推荐
- 查询数据库时mapper报错:It's likely that neither a Result Type nor a Result Map was specified.
因为mapper.xml里把resultType写成了parameterType
- 第一个spring冲刺团队贡献分(80分满分)
团队贡献分(80分满分): 李泳江 24 叶煜稳 26 谢洪跃 18 周伟雄 12
- Ubuntu下tensorboard的使用
1. 找到运行程序的事件输出路径 找到路径并进入,例如我的是在路径/home/ly/codes下: 2. 打开tensorboard服务器 在终端输入(--logdir=自己所存的路径): t ...
- 关于MUI v0.18.0版本 Table组件里的复选框不能选的解决方案
前段时间在用MUI的时候,Table组件出现复选框不能选的bug(描述: 点击复选框,点击事件会触发,复选框勾选状态无变化). 解决方法: 用CheckBox组件代替Table组件自带的复选框. 解决 ...
- MongoDB中的数据导出为excel CSV 文件
1.打开命令行,进入我们所安装的mongodb路径下的bin文件夹 2.我们采用bin文件夹下的mongoexport方法进行导出, mongoexport -d myDB -c user -f _i ...
- Beta阶段——第二篇 Scrum 冲刺博客
i. 提供当天站立式会议照片一张: ii. 每个人的工作 (有work item 的ID) (1) 昨天已完成的工作: 账单收支分明,剩余舍费关联成功 (2) 今天计划完成的工作: 账单删除功能,排序 ...
- HDU 2103 Family planning
http://acm.hdu.edu.cn/showproblem.php?pid=2103 Problem Description As far as we known,there are so m ...
- Delphi CreateMutex 防止程序多次运行
windows是个多用户多任务的操作系统,支持多个程序同时运行,如果你的程序不想让用户同时运行一个以上, 那应该怎样做呢? 本文将介绍避免用户同时运行多个程序的例子. 需要用到的函数CreateMut ...
- 在服务器搭建Jupyter notebook
安装 Jupyter Notebook (这里虽然是对centos和Python2的,但是在Ubuntu16.04,Python3同样可以照着弄) Jupyter Notebook 简介 Jupyte ...
- 一文总结之MyBatis
目录 MyBatis 目标 MyBatis演示 Configuration.xml 映射文件 初始化配置文件 Dao Spring与MyBatis集成 pom Spring配置文件 MyBatis配置 ...