QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#268965#5109. Spider WalkjuampiTL 0ms0kbPython31.7kb2023-11-29 05:11:012023-11-29 05:11:02

Judging History

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

  • [2023-11-29 05:11:02]
  • 评测
  • 测评结果:TL
  • 用时:0ms
  • 内存:0kb
  • [2023-11-29 05:11:01]
  • 提交

answer

from functools import lru_cache

N = 2 * (10**5) + 5
M = 5 * (10**5) + 5


n ,m , s= map(int, input().split())
s = s - 1
lines = [(d, t - 1) for _ in range(m) for d, t in (map(int, input().split()),)]


a = [0]*N
c = [0] * N

def nxt(x, c):
    return (x + c) % n

def pre(x, c):
    return (x - c + n) % n


def add(x, y):
    x += 1
    while x <= n:
        c[x] += y
        x += (x & -x)

@lru_cache(maxsize=None)
def query(x):
    res = 0
    x += 1
    while x:
        res += c[x]
        x -= (x & -x)
    return res

def padd(l, r, x):
    add(l, x)
    add(r + 1, -x)

def work(l, r):
    if l <= r:
        padd(l, r, -1)
    else:
        padd(l, n - 1, -1)
        padd(0, r, -1)

for i in range(n):
    ab = abs(s - i)
    padd(i, i, min(ab, n - ab))

lines.sort(reverse=True)

for d, t in lines:
    nx = (t + 1) % n
    
    v1 = query(t)
    v2 = query(nx)
    
    if v1 == v2:
        continue
    if v1 > v2:
        padd(t, t, -1)
        cur = 0
        for i in range(18, -1, -1):
            if cur + (1 << i) <= n - 2 and query(pre(t, cur + (1 << i))) == v1 + cur + (1 << i):
                cur += 1 << i
        if cur:
            work(pre(t, cur), pre(t, 1))
        if query(nxt(nx, 1)) != v2 - 1:
            padd(nx, nx, 1)
    else:
        padd(nx, nx, -1)
        cur = 0
        for i in range(18, -1, -1):
            if cur + (1 << i) <= n - 2 and query(nxt(nx, cur + (1 << i))) == v2 + cur + (1 << i):
                cur += 1 << i
        if cur:
            work(nxt(nx, 1), nxt(nx, cur))
        if query(pre(t, 1)) != v1 - 1:
            padd(t, t, 1)
for i in range(n):
    print(query(i))

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 0
Time Limit Exceeded

input:

200000 500000 116205
1 2
2 3
3 4
4 5
5 6
6 7
7 8
8 9
9 10
10 11
11 12
12 13
13 14
14 15
15 16
16 17
17 18
18 19
19 20
20 21
21 22
22 23
23 24
24 25
25 26
26 27
27 28
28 29
29 30
30 31
31 32
32 33
33 34
34 35
35 36
36 37
37 38
38 39
39 40
40 41
41 42
42 43
43 44
44 45
45 46
46 47
47 48
48 49
49 50
50...

output:


result: