QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#722744#9528. New Energy VehiclehcywoiTL 0ms3528kbC++231.5kb2024-11-07 20:05:442024-11-07 20:05:46

Judging History

This is the latest submission verdict.

  • [2024-11-07 20:05:46]
  • Judged
  • Verdict: TL
  • Time: 0ms
  • Memory: 3528kb
  • [2024-11-07 20:05:44]
  • Submitted

answer

#include <bits/stdc++.h>

using i64 = long long;

void solve() {
  int n, m;
  std::cin >> n >> m;

  std::vector<int> a(n), e(n);
  for (int i = 0; i < n; i++) {
    std::cin >> a[i];
    e[i] = a[i];
  }

  std::vector<int> x(m), t(m);
  std::vector<std::vector<int>> vec(n);
  for (int i = 0; i < m; i++) {
    std::cin >> x[i] >> t[i];
    t[i]--;
    vec[t[i]].push_back(i);
  }

  for (int i = m - 1; i; i--) {
    x[i] -= x[i - 1];
  }

  i64 dis = 0;
  std::set<std::pair<int, int>> s;
  for (int i = 0; i < n; i++) {
    if (!vec[i].empty()) {
      s.insert({vec[i].front(), i});
    } else {
      s.insert({m, i});
    }
  }
  for (int i = 0; i < m; i++) {
    int bx = x[i];
    while (!s.empty()) {
      auto [_, k] = *s.begin();
      if (x[i] < e[k]) {
        e[k] -= x[i];
        x[i] = 0;
        break;
      }
      x[i] -= e[k];
      e[k] = 0;
      s.erase(s.begin());
    }
    if (x[i] > 0) {
      std::cout << dis + bx - x[i] << "\n";
      return;
    }
    dis += bx;

    auto nxt = upper_bound(vec[t[i]].begin(), vec[t[i]].end(), i);
    if (s.begin()->first == i) {
      s.erase(s.begin());
    }
    if (nxt != vec[t[i]].end()) {
      s.insert({*nxt, t[i]});
    }
    e[t[i]] = a[i];
  }

  for (int i = 0; i < n; i++) {
    dis += e[i];
  }
  std::cout << dis << "\n";
}

int main() {
  std::ios::sync_with_stdio(false);
  std::cin.tie(nullptr);

  int t;
  std::cin >> t;

  while (t--) {
    solve();
  }

  return 0;
}

詳細信息

Test #1:

score: 100
Accepted
time: 0ms
memory: 3528kb

input:

2
3 1
3 3 3
8 1
2 2
5 2
1 2
2 1

output:

12
9

result:

ok 2 lines

Test #2:

score: -100
Time Limit Exceeded

input:

6
3 2
2 2 2
6 1
7 1
2 2
3 3
2 1
6 2
2 3
2 2
5 1
7 2
9 1
2 2
3 3
2 1
6 2
1 1
999999999
1000000000 1
1 1
1000000000
1000000000 1

output:


result: