結果
問題 | No.911 ラッキーソート |
ユーザー |
|
提出日時 | 2021-07-14 22:42:39 |
言語 | PyPy3 (7.3.15) |
結果 |
AC
|
実行時間 | 170 ms / 2,000 ms |
コード長 | 1,226 bytes |
コンパイル時間 | 233 ms |
コンパイル使用メモリ | 81,920 KB |
実行使用メモリ | 112,824 KB |
最終ジャッジ日時 | 2024-07-03 23:25:06 |
合計ジャッジ時間 | 6,778 ms |
ジャッジサーバーID (参考情報) |
judge1 / judge3 |
(要ログイン)
ファイルパターン | 結果 |
---|---|
sample | AC * 3 |
other | AC * 46 |
ソースコード
import sysinput = lambda : sys.stdin.readline().rstrip()sys.setrecursionlimit(2*10**5+10)write = lambda x: sys.stdout.write(x+"\n")debug = lambda x: sys.stderr.write(x+"\n")writef = lambda x: print("{:.12f}".format(x))n,L,R = list(map(int, input().split()))a = list(map(int, input().split()))l = [-1]*62ng = 0for i in range(1,n):v = a[i]p = a[i-1]for b in range(62)[::-1]:if (v>>b&1) == (p>>b&1):continueif v>>b&1:if l[b]==1:ng = 1breakl[b] = 0else:if l[b]==0:ng = 1breakl[b] = 1breakif ng:breakdef sub(r):if r<0:return 0ll = []v = 0for i in range(62)[::-1]:if l[i]==-1:if v+(1<<i)<=r:ll.append(1)v += (1<<i)else:ll.append(0)v = 1res = 0# print(ll[-10:])for b in ll[::-1]:res += b*vv *= 2return res + 1if ng:ans = 0else:val = 0for i in range(62):if l[i]==1:val += (1<<i)ans = sub(R-val) - sub(L-val-1)print(ans)