QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#657596#7904. Rainbow SubarrayDynamic_PigeonWA 0ms3632kbC++202.6kb2024-10-19 15:02:462024-10-19 15:02:47

Judging History

你现在查看的是最新测评结果

  • [2024-10-19 15:02:47]
  • 评测
  • 测评结果:WA
  • 用时:0ms
  • 内存:3632kb
  • [2024-10-19 15:02:46]
  • 提交

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;
}

详细

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'