結果
問題 |
No.2501 Maximum Inversion Number
|
ユーザー |
|
提出日時 | 2023-10-13 23:00:02 |
言語 | PyPy3 (7.3.15) |
結果 |
WA
|
実行時間 | - |
コード長 | 1,576 bytes |
コンパイル時間 | 217 ms |
コンパイル使用メモリ | 82,560 KB |
実行使用メモリ | 117,592 KB |
最終ジャッジ日時 | 2024-09-15 18:49:56 |
合計ジャッジ時間 | 5,060 ms |
ジャッジサーバーID (参考情報) |
judge4 / judge6 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
other | AC * 3 WA * 14 |
ソースコード
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 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()