UOJ Logo

NOI.AC

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#212190#3816. 元素Panjunnan00ms0kbPython2.72.1kb2024-10-13 11:58:112024-10-13 12:31:32

answer

class SegmentTree:
    def __init__(self, n):
        self.tree = [0] * (4 * n)
        self.lazy = [0] * (4 * n)

    def build(self, a, l, r, node):
        if l == r:
            self.tree[node] = a[l]
        else:
            mid = (l + r) // 2
            self.build(a, l, mid, 2 * node)
            self.build(a, mid + 1, r, 2 * node + 1)
            self.tree[node] = max(self.tree[2 * node], self.tree[2 * node + 1])

    def update(self, l, r, val, node):
        if self.lazy[node] != 0:
            self.tree[node] += self.lazy[node]
            if l != r:
                self.lazy[2 * node] += self.lazy[node]
                self.lazy[2 * node + 1] += self.lazy[node]
            self.lazy[node] = 0
        if l > r or l > r:
            return
        if l == r:
            self.tree[node] += val
        else:
            mid = (l + r) // 2
            self.update(l, mid, val, 2 * node)
            self.update(mid + 1, r, val, 2 * node + 1)
            self.tree[node] = max(self.tree[2 * node], self.tree[2 * node + 1])

    def query(self, l, r, node):
        if self.lazy[node] != 0:
            self.tree[node] += self.lazy[node]
            if l != r:
                self.lazy[2 * node] += self.lazy[node]
                self.lazy[2 * node + 1] += self.lazy[node]
            self.lazy[node] = 0
        if l > r or l > r:
            return -float('inf')
        if l == r:
            return self.tree[node]
        else:
            mid = (l + r) // 2
            left = self.query(l, mid, 2 * node)
            right = self.query(mid + 1, r, 2 * node + 1)
            return max(left, right)

def solve(n, q, a, queries):
    tree = SegmentTree(n)
    tree.build(a, 0, n - 1, 1)
    results = []
    for l, r in queries:
        max_element = tree.query(l - 1, r - 1, 1)
        results.append(max_element + 1)
    return results

n, q = map(int, input().split())
a = list(map(int, input().split()))
queries = [tuple(map(int, input().split())) for _ in range(q)]
results = solve(n, q, a, queries)
for result in results:
    print(result)

Details

小提示:点击横条可展开更详细的信息

Test #1:

score: 0
Dangerous Syscalls

input:

10 10
492 1887 1028 1209 252 1860 1527 699 1656 928
6 9
2 8
3 10
2 3
1 8
6 9
3 5
4 7
1 4
2 7

output:


result:


Test #2:

score: 0
Dangerous Syscalls

input:

50 50
413 1208 1780 279 1403 1706 11 1583 333 355 1068 1270 1835 1042 957 423 1140 1153 1709 284 281...

output:


result:


Test #3:

score: 0
Dangerous Syscalls

input:

50 50
407 1089 1459 1626 1917 555 1611 492 443 1149 406 1259 1729 1554 577 1310 1899 1578 1005 1459 ...

output:


result:


Test #4:

score: 0
Dangerous Syscalls

input:

50 50
1792 843 1272 547 698 1086 1174 1607 1277 1055 506 881 1445 372 1076 1770 647 1086 320 1912 18...

output:


result:


Test #5:

score: 0
Dangerous Syscalls

input:

50 50
44 1463 245 1177 1728 1335 768 475 790 623 1466 98 672 230 339 1428 872 1905 405 1260 1503 813...

output:


result:


Test #6:

score: 0
Dangerous Syscalls

input:

50 50
695 974 1078 231 500 498 1308 1666 1925 766 1994 1776 1955 1766 1191 1021 1581 1202 615 1230 1...

output:


result:


Test #7:

score: 0
Dangerous Syscalls

input:

200 200
403 329 389 1103 695 1865 818 671 750 1868 1422 422 1186 1431 172 1569 460 1580 406 1049 138...

output:


result:


Test #8:

score: 0
Dangerous Syscalls

input:

200 200
147 1386 1788 1493 1919 1136 861 871 1895 1006 1776 346 381 1666 296 289 568 1616 1535 531 2...

output:


result:


Test #9:

score: 0
Dangerous Syscalls

input:

2000 2000
1154 852 1088 1530 639 1318 1250 1222 1341 1070 205 656 903 1491 808 317 756 1962 102 1445...

output:


result:


Test #10:

score: 0
Dangerous Syscalls

input:

2000 2000
1232 731 1651 991 1681 1739 776 240 829 1337 493 248 214 1852 716 325 1280 1207 380 724 11...

output:


result: