EVERYTHING HAPPENS FOR THE BES|

wnsyou

园龄:2年4个月粉丝:19关注:16

2023-04-16 13:59阅读: 29评论: 0推荐: 0

abc249_f Ignore Operations 题解

Ignore Operations

题意

Takahashi 有一个整数 x,初始 x=0

n 次操作。第 i 次操作用两个整数 ti,yi 描述:

  • 如果 ti=1,将整数 x 替换为 yi
  • 如果 ti=2,将整数 x 替换为 x+yi

Takahashi 可以跳过其中至多 K 次操作。对于剩下的没跳过的操作序列,按顺序执行操作,并求出最终 x 的可能最大值。

数据范围

  • 0kn2×105,n1
  • ti{1,2},|yi|109

思路

我们肯定不会跳过那些对答案有正面作用的操作,那其他的呢?

来看一张草图。

显然,在最后一次赋值操作以前,所有操作均可视为没有

那么在最后一次赋值操作之后的那些操作呢?跳过第 i 次操作的话,对答案的贡献就是:yi,当我们跳过次数超过 k 时,我们要做出取舍:把对答案贡献最小的那一次放弃。

那么,我们可以推出第一步:从后往前找,用堆来存储每次操作对答案的贡献,模拟一下上面的那种操作即可。

那问题是,处理好了最后一次赋值操作以后的所有,那前面的怎么办呢?

这也不难,令 sumi 表示从操作 1 执行到操作 i、一次也不跳过的情况下的答案,那么删除最后一次赋值操作(j)对答案的贡献就是 sumj1sumj且这次操作是不可逆的,即永久消耗这次操作

统计答案即可。

复杂度

  • 时间:O(nlogn)
  • 空间:O(n)

Code

点击查看代码
#include <iostream>
#include <queue>
using namespace std;
using ll = long long;
const int N = 2e5 + 10;
struct Node {
int op, t;
} a[N];
int n, k;
ll x, y, sum[N], ans, num;
priority_queue<int> pq; // 堆维护
int main () {
ios::sync_with_stdio(0), cin.tie(0);
cin >> n >> k;
for (int i = 1; i <= n; i++) {
cin >> a[i].op >> a[i].t;
if (a[i].op == 1) { // 预处理 sum
sum[i] = a[i].t;
} else {
sum[i] = sum[i - 1] + a[i].t;
}
ans = sum[i];
}
for (int i = n; k && i >= 1; i--) {
if (a[i].op == 2 && a[i].t < 0) { // 操作 2
pq.push(a[i].t); // 答案贡献,这里取了个反
num += a[i].t; // 贡献之和
if (pq.size() > k) { // 操作次数超过 k
num -= pq.top(), pq.pop(); // 去掉答案贡献最小的
}
} else if (a[i].op == 1) { // 操作 1
num += sum[i] - sum[i - 1];
if (pq.size() == k) {
num -= pq.top(), pq.pop();
}
k--; // 不可逆的操作
}
ans = max(ans, sum[n] - num); // 计算答案最大值
}
cout << ans;
return 0;
}

本文作者:wnsyou の blog

本文链接:https://www.cnblogs.com/wnsyou-blog/p/17323159.html

版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。

posted @   wnsyou  阅读(29)  评论(0编辑  收藏  举报
  1. 1 勝利への道 安藤浩和
  2. 2 Minecraft’s End Eric Fullerton
  3. 3 月光曲完整版 贝多芬 云熙音乐
  4. 4 平凡之路 (Live版) 朴树
  5. 5 Minecraft C418
  6. 6 Paradise NiziU
  7. 7 叫我,灰原哀 龙大人不喷火
  8. 8 心机之蛙,一直摸你肚子 ——《名侦探柯南》原创同人曲 炊饭,叶辞樱,温海,寒砧,南柯柯,小茜玛姬,盛姝,阿崔Ac,贝壳初,千湛,兮茶子DaYu,乔慕,黎鹿北,起千温卿,遮阳伞,曲悠
  9. 9 战 歌 此去经年
Paradise - NiziU
00:00 / 00:00
An audio error has occurred, player will skip forward in 2 seconds.

作词 : AKIRA/Bang Chan (3RACHA)/CHANGBIN (3RACHA)/HAN (3RACHA)

作曲 : Bang Chan (3RACHA)/CHANGBIN (3RACHA)/HAN (3RACHA)/VERSACHOI

编曲 : VERSACHOI/Bang Chan(3RACHA)

昔々きいた話

ふたつの虹を超えたその向こう

光り輝く泉がある

その水面(みなも)映るのは

ほんとの自分

しあわせは今 しあわせは空

Let’s fly fly & fly We fly & fly

目と目を合わせ

信じあえるよ 感じあえるさ

Let’s fly fly & fly We fly & fly

いつか

わかるだろう

君にはもう君だけの色も形も

優しさも強さもあるんだ

上手くいかなくたって

失敗ばっかりだって

ぼくはここにいるよ

I love you so much 大好きなんだ

そのままで 大好きさ Paradise

宝物はそこにあるよ 気がついてよ

世界中探しても

君は君しかいないよ

広がる楽園 繋げよう

誰も誰もが Paradise

雨が降れば ぬかるむ道 Oh yeah

道端に咲いた花に集まる蝶を

照らす太陽は全てを温め

乾いた道に雨は降る

あたりまえだけど奇跡

小さなちっぽけな今には

大きな大きな夢が詰まっているの

悔しさに泣いたって

手を差し伸べるから

ぼくはここにいるから

I love you so much 大好きなんだ

そのままで 大好きさ Paradise

宝物は君なんだよ 気がついてよ

この惑星(ほし)の歴史にも

君は君しかいないよ

目に見えないけど確かに

ひとりひとりの Paradise

しあわせは今 しあわせは空

Let’s fly fly & fly We fly & fly

目と目を合わせ

信じあえるよ 感じあえる

だから大丈夫

心のまま行こう Paradise

加载中…

{{tag.name}}

{{tran.text}}{{tran.sub}}
无对应文字
有可能是
{{input}}
尚未录入,我来提交对应文字
评论
收藏
关注
推荐
深色
回顶
收起
点击右上角即可分享
微信分享提示