結果
問題 | No.2501 Maximum Inversion Number |
ユーザー | flygon |
提出日時 | 2023-10-13 23:04:01 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,603 bytes |
コンパイル時間 | 444 ms |
コンパイル使用メモリ | 82,304 KB |
実行使用メモリ | 116,556 KB |
最終ジャッジ日時 | 2024-09-15 18:52:59 |
合計ジャッジ時間 | 5,205 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge1 |
(要ログイン)
テストケース
テストケース表示入力 | 結果 | 実行時間 実行使用メモリ |
---|---|---|
testcase_00 | AC | 49 ms
54,400 KB |
testcase_01 | WA | - |
testcase_02 | WA | - |
testcase_03 | WA | - |
testcase_04 | AC | 199 ms
116,556 KB |
testcase_05 | AC | 192 ms
115,440 KB |
testcase_06 | AC | 198 ms
111,648 KB |
testcase_07 | WA | - |
testcase_08 | WA | - |
testcase_09 | AC | 105 ms
91,904 KB |
testcase_10 | WA | - |
testcase_11 | WA | - |
testcase_12 | WA | - |
testcase_13 | WA | - |
testcase_14 | WA | - |
testcase_15 | WA | - |
testcase_16 | AC | 458 ms
89,216 KB |
ソースコード
import sys sys.setrecursionlimit(5*10**5) input = sys.stdin.readline from collections import defaultdict, deque, Counter from heapq import heappop, heappush from bisect import bisect_left, bisect_right from math import gcd def sol(): n,m = map(int,input().split()) l = list(map(int,input().split())) r = list(map(int,input().split())) if sum(l) > m or sum(r) < m: print(-1) return mxcnt = defaultdict(int) cnt = defaultdict(int) left = m for i in range(n): cnt[l[i]] += 1 left -= l[i] r.sort() r = r[::-1] all = [] for k, v in cnt.items(): all.append([k,v]) nn = len(all) all.sort() all.append([10**10,0]) ans = [] for i in range(nn): now = all[i][0] cnt = all[i][1] while r and r[-1] == now: r.pop() cnt -= 1 ans.append([now, 1]) nxt = all[i+1][0] while r and r[-1] <= nxt: num = r.pop() dif = num - now if cnt == 0: continue if left > dif * cnt: left -= dif*cnt cnt -= 1 now = num ans.append([now, 1]) else: add = left//cnt rr = left % cnt ans.append([now+add+1,rr]) ans.append([now+add,cnt-rr]) left = 0 cnt = 0 all[i+1][1] += cnt ansnum = m*(m-1)//2 for i,j in ans: ansnum -= j*(i*(i-1)//2) print(ansnum) return T = int(input()) for i in range(T): sol()