Monoxer Programming Contest 2022（AtCoder Beginner Contest 249）

F - Ignore Operations

Time Limit: 2 sec / Memory Limit: 1024 MB

Score : $500$ points

Problem Statement

Takahashi has an integer $x$. Initially, $x = 0$.

There are $N$ operations. The $i$-th operation $(1 \leq i \leq N)$ is represented by two integers $t_i$ and $y_i$ as follows:

• If $t_i = 1$, replace $x$ with $y_i$.
• If $t_i = 2$, replace $x$ with $x + y_i$.

Takahashi may skip any number between $0$ and $K$ (inclusive) of the operations. When he performs the remaining operations once each without changing the order, find the maximum possible final value of $x$

Constraints

• $1 \leq N \leq 2 \times 10^5$
• $0 \leq K \leq N$
• $t_i \in \{1,2\} \, (1 \leq i \leq N)$
• $|y_i| \leq 10^9 \, (1 \leq i \leq N)$
• All values in input are integers.

Input

Input is given from Standard Input in the following format:

$N$ $K$
$t_1$ $y_1$
$\vdots$
$t_N$ $y_N$

5 1
2 4
2 -3
1 2
2 1
2 -3

Sample Output 1

3

If he skips the $5$-th operation, $x$ changes as $0 \rightarrow 4 \rightarrow 1 \rightarrow 2 \rightarrow 3$, so $x$ results in $3$. This is the maximum.

1 0
2 -1000000000

-1000000000

10 3
2 3
2 -1
1 4
2 -1
2 5
2 -9
2 2
1 -6
2 5
2 -3

15

代码

#include <bits/stdc++.h>

using namespace std;

const int MAXN = 2e5 + 10;
int N, K;
int t[MAXN], y[MAXN];
priority_queue<int> pque;

int main()
{
cin >> N >> K;
for (int i = N; i > 0; i--)
cin >> t[i] >> y[i];
long long ans = INT64_MIN, added = 0;
for (int i = 1; i <= N; i++)
{
if (t[i] == 2)
{
if (y[i] >= 0)
else
pque.push(y[i]);
}
else
{
ans = max(ans, y[i] + added);
K--;
}
while (pque.size() > K)
{
}