QOJ.ac

QOJ

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#530287#3276. 出题高手liuziao30 268ms22928kbC++203.1kb2024-08-24 15:48:502024-08-24 15:48:51

Judging History

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

  • [2024-08-24 15:48:51]
  • 评测
  • 测评结果:30
  • 用时:268ms
  • 内存:22928kb
  • [2024-08-24 15:48:50]
  • 提交

answer

#include <bits/stdc++.h>

// #define int int64_t

const int kMaxN = 5e5 + 5;

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

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

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

int n, m, q;
Frac mx;
int64_t sum[kMaxN], unq[kMaxN];
int a[kMaxN], ss[kMaxN], pre[kMaxN][2];
std::vector<std::tuple<int, int, Frac>> vec;

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) {
    // std::cerr << i << '\n';
    Frac now = {-1000000000, 1};
    int cnt = 0;
    for (int j = pre[i][0]; ~j; j = pre[j][0]) {
      Frac tmp = Frac((sum[i] - sum[j]) * (sum[i] - sum[j]), i - j);
      // if (tmp > now) vec.emplace_back(j + 1, i, tmp);
      mx = std::max(mx, tmp);
      if (++cnt >= 100) break;
    }
    now = {-1000000000, 1};
    cnt = 0;
    for (int j = pre[i][1]; ~j; j = pre[j][1]) {
      Frac tmp = Frac((sum[i] - sum[j]) * (sum[i] - sum[j]), i - j);
      // if (tmp > now) vec.emplace_back(j + 1, i, tmp);
      mx = std::max(mx, tmp);
      if (++cnt >= 100) break;
    }
  }
}

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 ql, qr;
    std::cin >> ql >> qr;
    // Frac ans = {0, 1};
    // for (auto [l, r, w] : vec)
    //   if (l >= ql && r <= qr)
    //     ans = std::max(ans, w);
    // std::cout << ans.x << ' ' << ans.y << '\n';
    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: 18ms
memory: 12204kb

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:

164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
164480625 33
1...

result:

wrong answer 1st numbers differ - expected: '54826875', found: '164480625'

Subtask #2:

score: 0
Wrong Answer

Test #6:

score: 15
Accepted
time: 48ms
memory: 13432kb

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:

466344025 67

result:

ok 2 number(s): "466344025 67"

Test #7:

score: 0
Wrong Answer
time: 47ms
memory: 19020kb

input:

100000
-387 -313 -47 -714 -74 239 8 591 541 -633 -660 981 -230 -148 -813 -802 -108 -543 -640 50 962 137 -972 -936 -975 885 793 -541 932 861 -348 885 -280 -977 -677 964 355 604 54 -977 -548 979 -516 136 437 -697 -23 -748 492 897 -538 785 617 -840 675 -978 307 -288 -493 682 678 -623 613 762 -622 -283 ...

output:

369062521 61

result:

wrong answer 1st numbers differ - expected: '2417885584', found: '369062521'

Subtask #3:

score: 30
Accepted

Test #11:

score: 30
Accepted
time: 259ms
memory: 22328kb

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:

1878442281 242

result:

ok 2 number(s): "1878442281 242"

Test #12:

score: 30
Accepted
time: 264ms
memory: 22928kb

input:

500000
145 33 695 -456 761 -556 698 272 121 -445 100 -93 954 485 161 798 -279 921 456 570 151 -880 456 -640 -69 385 -301 -707 -84 -514 -964 597 874 346 841 274 -727 -177 -44 -883 903 -792 -776 926 416 -862 -247 -985 518 674 174 535 -295 960 -952 722 -947 -365 366 -520 -60 -404 800 811 -139 779 735 3...

output:

457831609 56

result:

ok 2 number(s): "457831609 56"

Test #13:

score: 30
Accepted
time: 268ms
memory: 22324kb

input:

500000
762 -391 336 983 -962 920 -428 955 487 -525 281 514 851 -508 607 153 -439 -307 345 557 -615 -997 272 813 -556 -69 -401 -625 143 -142 -499 380 749 613 -190 173 -633 -489 -285 183 -799 645 -863 379 169 -177 993 -184 753 346 58 770 254 705 -467 -700 -337 587 -333 685 -1 -618 -961 327 -33 -722 65...

output:

1160015481 110

result:

ok 2 number(s): "1160015481 110"

Test #14:

score: 30
Accepted
time: 266ms
memory: 22576kb

input:

500000
-819 -236 -303 662 -316 -328 51 821 717 -423 -565 -394 858 -816 -246 -993 831 -999 237 779 52 -642 826 945 307 -675 83 -715 -797 -451 -250 996 53 -765 -869 -717 -126 -250 532 -848 82 -100 542 80 798 701 -648 -433 234 362 462 -770 554 -211 -368 -653 897 -940 416 632 734 -18 727 319 -328 697 11...

output:

188897536 23

result:

ok 2 number(s): "188897536 23"

Test #15:

score: 30
Accepted
time: 268ms
memory: 22544kb

input:

500000
-161 619 -969 31 102 781 561 617 -685 -814 385 -998 911 -206 -404 519 276 -318 -731 -908 901 856 839 333 124 481 29 407 -315 -219 896 956 -286 996 -991 -800 951 109 -846 624 750 -88 955 -752 -814 134 -316 -777 844 391 359 -324 789 -713 -620 849 -553 575 357 792 -735 -828 373 378 -213 -501 -29...

output:

167832025 17

result:

ok 2 number(s): "167832025 17"

Subtask #4:

score: 0
Wrong Answer

Test #16:

score: 0
Wrong Answer
time: 50ms
memory: 17280kb

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:

111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
111471364 16
1...

result:

wrong answer 1st numbers differ - expected: '1352474176', found: '111471364'

Subtask #5:

score: 0
Wrong Answer

Test #31:

score: 0
Wrong Answer
time: 101ms
memory: 15168kb

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:

1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
1204784100 141
...

result:

wrong answer 1st numbers differ - expected: '401594700', found: '1204784100'