https://www.acmicpc.net/problem/20052
L~R까지의 합이 0이면 된다. 누적합과 세그트리를 사용하자
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
import sys
input = sys.stdin.readline
INF = 10 ** 7
seg = [0 for _ in range(404040)]
p = [0 for _ in range(101010)]
def init(x, s, e):
if s == e:
seg[x] = p[s]
return seg[x]
mid = (s + e) // 2
seg[x] = min(init(x * 2, s, mid), init(x * 2 + 1, mid + 1, e))
return seg[x]
def getMin(x, s, e, l, r):
if e < l or r < s:
return INF
if l <= s and e <= r:
return seg[x]
mid = (s + e) // 2
return min(getMin(x * 2, s, mid, l, r), getMin(x * 2 + 1, mid + 1, e, l, r))
s = str((input().rstrip()))
for i in range(len(s)):
p[i + 1] = p[i] + (1 if s[i] == '(' else -1)
init(1, 1, len(s))
m = int(input())
ans = 0
for queries in range(m):
i, j = map(int, input().split())
if getMin(1, 1, len(s), i, j) == p[i - 1] and p[j] == p[i - 1]:
ans += 1
print(ans)
|
cs |
'백준 문제풀이' 카테고리의 다른 글
백준 16993 - 연속합과 쿼리 [Python] (0) | 2022.04.15 |
---|---|
백준 10848 - 팔렘방의 다리 [Python] (0) | 2022.04.12 |
백준 21908 - Disk Sort [Python] (0) | 2022.03.24 |
백준 13512 - 트리와 쿼리 3 [Python] (0) | 2021.09.08 |
백준 3056 - 007 [Python] (0) | 2021.09.02 |