QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#657596 | #7904. Rainbow Subarray | Dynamic_Pigeon | WA | 0ms | 3632kb | C++20 | 2.6kb | 2024-10-19 15:02:46 | 2024-10-19 15:02:47 |
Judging History
answer
#include <bits/stdc++.h>
#include <cassert>
#include <iterator>
#ifdef DYNAMIC_PIGEON
#include "algo/debug.h"
#else
#define debug(...) 114514
#endif
#define Dynamic_Pigeon 0
using i64 = std::int64_t;
using u64 = std::uint64_t;
using u32 = std::uint32_t;
constexpr i64 MOD = i64(1e9) + 7;
constexpr int INF = 1e9;
constexpr i64 INF_LONG_LONG = 1e18;
#define all(a) a.begin(), a.end()
#define rall(a) a.rbegin(), a.rend()
struct Node {
std::multiset<int> l, r;
i64 pre = 0, lst = 0;
int get_mid() {
return *l.rbegin();
}
void insert(int x) {
if (l.empty() || x > *l.rbegin()) {
r.insert(x);
lst += x;
} else {
l.insert(x);
pre += x;
}
if (r.size() + 1 < l.size()) {
i64 p = l.extract(std::prev(l.end())).value();
lst += p;
pre -= p;
r.emplace(p);
}
if (l.size() < r.size()) {
i64 p = r.extract(r.begin()).value();
lst -= p;
pre += p;
l.emplace(p);
}
}
void erase(int x) {
if (x >= *l.rbegin()) {
lst -= x;
r.extract(x);
} else {
pre -= x;
l.extract(x);
}
if (r.size() + 1 < l.size()) {
i64 p = l.extract(std::prev(l.end())).value();
lst += p;
pre -= p;
r.emplace(p);
}
if (l.size() < r.size()) {
i64 p = r.extract(r.begin()).value();
lst -= p;
pre += p;
l.emplace(p);
}
}
void clear() {
l.clear();
r.clear();
pre = 0;
lst = 0;
}
};
void tizzytyt_SuKi() {
int n;
i64 k;
std::cin >> n >> k;
std::vector<int> a(n + 1);
for (int i = 1; i <= n; i++) {
std::cin >> a[i];
a[i] -= i;
}
Node m;
auto check = [&](int len) -> bool {
m.clear();
for (int i = 1; i < len; i++) {
m.insert(a[i]);
}
i64 res = INF_LONG_LONG;
for (int i = len; i <= n; i++) {
m.insert(a[i]);
i64 mid = m.get_mid();
i64 p = mid * (len & 1) + m.lst - m.pre;
res = std::min(res, p);
m.erase(a[i - len + 1]);
}
return res <= k;
};
int l = 1, r = n;
while (l < r) {
int mid = (l + r + 1) >> 1;
assert(l != mid);
if (check(mid)) {
l = mid;
} else {
r = mid - 1;
}
}
std::cout << l << "\n";
}
signed main() {
#ifdef DYNAMIC_PIGEON
freopen("input.in", "r", stdin);
#else
std::cin.tie(0)->sync_with_stdio(0);
#endif
int t = 1;
std::cin >> t;
while (t--) {
tizzytyt_SuKi();
}
return Dynamic_Pigeon;
}
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 0
Wrong Answer
time: 0ms
memory: 3632kb
input:
5 7 5 7 2 5 5 4 11 7 6 0 100 3 4 5 99 100 5 6 1 1 1 1 1 5 50 100 200 300 400 500 1 100 3
output:
4 3 5 2 1
result:
wrong answer 4th lines differ - expected: '1', found: '2'