QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#530203#3276. 出题高手liuziao0 21ms11900kbC++202.6kb2024-08-24 15:24:382024-08-24 15:24:38

Judging History

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

  • [2024-08-24 15:24:38]
  • 评测
  • 测评结果:0
  • 用时:21ms
  • 内存:11900kb
  • [2024-08-24 15:24:38]
  • 提交

answer

#include <bits/stdc++.h>

#define int int64_t

const int kMaxN = 5e5 + 5;

struct Frac {
  int x, y; // x / y;

  Frac(int _x = 0, int _y = 1) {
    int d = std::__gcd(_x, _y);
    x = _x / d, y = _y / d;
  }

  friend bool operator <(Frac a, Frac b) { return (__int128_t)a.x * b.y < (__int128_t)a.y * b.x; }
  friend bool operator <=(Frac a, Frac b) { return (__int128_t)a.x * b.y <= (__int128_t)a.y * b.x; }
  friend bool operator >(Frac a, Frac b) { return (__int128_t)a.x * b.y > (__int128_t)a.y * b.x; }
  friend bool operator >=(Frac a, Frac b) { return (__int128_t)a.x * b.y >= (__int128_t)a.y * b.x; }
};

int n, m, q;
Frac mx;
int a[kMaxN], sum[kMaxN], ss[kMaxN], unq[kMaxN], pre[kMaxN][2];

struct BIT1 {
  int c[kMaxN];

  void upd(int x, int v) {
    for (; x <= m; x += x & -x) c[x] = std::max(c[x], v);
  }
  int qry(int x) {
    int ret = 0;
    for (; x; x -= x & -x) ret = std::max(ret, c[x]);
    return ret;
  }
} bit1;

struct BIT2 {
  int c[kMaxN];

  void upd(int x, int v) {
    for (; x; x -= x & -x) c[x] = std::max(c[x], v);
  }
  int qry(int x) {
    int ret = 0;
    for (; x <= m; x += x & -x) ret = std::max(ret, c[x]);
    return ret;
  }
} bit2;

void prework() {
  for (int i = 1; i <= n; ++i) {
    sum[i] = sum[i - 1] + a[i];
    unq[i] = sum[i];
  }
  std::sort(unq + 1, unq + 1 + n);
  m = std::unique(unq + 1, unq + 1 + n) - (unq + 1);
  for (int i = 1; i <= n; ++i) ss[i] = std::lower_bound(unq + 1, unq + 1 + m, sum[i]) - unq;
  pre[0][0] = pre[0][1] = -1;
  for (int i = 1; i <= n; ++i) {
    pre[i][0] = bit1.qry(ss[i]);
    pre[i][1] = bit2.qry(ss[i]);
    bit1.upd(ss[i], i), bit2.upd(ss[i], i);
  }

  for (int i = 1; i <= n; ++i) {
    Frac now = {-1000000000, 1};
    for (int j = pre[i][0]; ~j; j = pre[j][0]) {
      mx = std::max(mx, Frac((sum[i] - sum[j]) * (sum[i] - sum[j]), i - j));
    }
    for (int j = pre[i][1]; ~j; j = pre[j][1]) {
      mx = std::max(mx, Frac((sum[i] - sum[j]) * (sum[i] - sum[j]), i - j));
    }
  }
}

void dickdreamer() {
  std::cin >> n;
  for (int i = 1; i <= n; ++i) std::cin >> a[i];
  prework();
  std::cin >> q;
  for (int i = 1; i <= q; ++i) {
    int l, r;
    std::cin >> l >> r;
    std::cout << mx.x << ' ' << mx.y << '\n';
  }
}

int32_t main() {
#ifdef ORZXKR
  freopen("in.txt", "r", stdin);
  freopen("out.txt", "w", stdout);
#endif
  std::ios::sync_with_stdio(0), std::cin.tie(0), std::cout.tie(0);
  int T = 1;
  // std::cin >> T;
  while (T--) dickdreamer();
  // std::cerr << 1.0 * clock() / CLOCKS_PER_SEC << "s\n";
  return 0;
}

详细

Subtask #1:

score: 0
Wrong Answer

Test #1:

score: 0
Wrong Answer
time: 21ms
memory: 11900kb

input:

2000
-113 314 -664 697 211 -199 -38 -190 8 -661 910 -811 -113 942 77 433 -261 -368 129 -525 968 -608 -21 38 -562 438 -935 -228 220 333 985 -430 916 586 764 476 794 664 383 503 206 -60 380 -130 -988 -904 -996 -304 -286 31 114 119 850 -942 714 -369 -842 250 -192 -462 -727 -427 -602 126 231 718 121 559...

output:

54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
54826875 11
...

result:

wrong answer 3rd numbers differ - expected: '14638276', found: '54826875'

Subtask #2:

score: 0
Time Limit Exceeded

Test #6:

score: 0
Time Limit Exceeded

input:

100000
754 792 -680 426 425 347 481 -690 530 378 73 -907 -431 45 -530 -552 440 -890 -15 712 695 -679 -310 13 718 805 193 -291 -877 -74 -355 511 -679 -395 166 -710 -657 -19 874 26 832 507 854 -289 700 -404 472 -302 -977 8 -698 40 766 705 369 838 700 -964 552 -535 -75 -608 -181 -503 468 447 772 904 -2...

output:


result:


Subtask #3:

score: 0
Time Limit Exceeded

Test #11:

score: 0
Time Limit Exceeded

input:

500000
794 -75 -596 -322 -945 -908 -609 -164 488 626 -877 -710 140 -120 -475 -837 738 669 634 -643 -682 667 816 -785 -608 -836 -860 -932 242 70 -620 268 -121 288 209 -392 732 750 558 -480 565 327 -217 -891 767 211 -690 -66 813 -889 952 615 432 19 411 800 678 718 522 422 940 -510 -544 449 -357 640 40...

output:


result:


Subtask #4:

score: 0
Time Limit Exceeded

Test #16:

score: 0
Time Limit Exceeded

input:

100000
-496 -233 354 -632 -196 177 -878 -255 -19 -636 685 -70 101 -975 -406 -988 -965 -205 563 -766 763 511 -116 -746 -129 14 106 928 -457 -257 -283 226 3 899 -359 -792 615 490 -57 986 -243 624 -239 931 -555 -821 -72 -611 -380 -397 248 -132 956 -195 -322 -231 319 -214 837 -379 -931 -301 -4 -673 280 ...

output:


result:


Subtask #5:

score: 0
Time Limit Exceeded

Test #31:

score: 0
Time Limit Exceeded

input:

100000
139 -485 -497 -818 254 169 -560 22 377 -67 -243 -75 743 -788 -676 -26 -775 371 576 -303 54 733 422 800 445 687 479 -16 -288 259 783 -586 912 616 439 -416 676 -555 172 659 501 -868 337 22 -60 260 603 -982 -149 466 769 -595 -117 949 -544 904 753 20 776 175 -888 937 -792 -647 -615 59 -298 452 -6...

output:


result: