标准输入输出
- 在Python中,使用
input()
函数可以读取标准输入,使用print()
函数可以输出结果到标准输出
- 虽然这样输入输出方便,但是当有大量的输入数据和输出结果时,使用这种方式可能会导致超时
sys.setrecursionlimit(1000000)
设置递归深度也是必须的
# 读取一个整数
n = int(input())
# 读取一行字符串
s = input()
# 输出一个整数
print(n)
# 输出一行字符串
print(s)
快速输入输出
- 提高运行效率,可以使用
sys.stdin
, sys.stdout
来代替标准输入输出
import sys
sys.setrecursionlimit(1000000)
input = sys.stdin.readline
print = sys.stdout.write
# 读取一个整数
n = int(input())
# 读取一行字符串
s = input().strip()
# 输出一个整数
print(str(n) + '\n')
# 输出一行字符串
print(s + 'n')
注意事项
sys.stdin.readline
读入数据时,会包含一个换行符\n
,可以使用strip()
函数去除换行符
- 使用
sys.stdout.write
输出结果时,要将结果转换为字符串类型,并添加换行符\n
示例_AcWing 1275.最大数
- 对于线段树这道题,如果不适用快速输入输出最后一个点永远过不了
"""
线段树支持的操作:单点修改,区间修改,区间查询(包括求区间内最大值,区间和,求区间内最小值等)
build:初始化线段树
modify:单点或者区间修改
query:区间查询
pushup:
pushdown:
"""
import sys
sys.setrecursionlimit(100000000)
input = sys.stdin.readline
print = sys.stdout.write
# 定义节点
class Node:
def __init__(self, l, r, v = 0):
self.l = l
self.r = r
self.v = v
def pushup(u):
global tr
tr[u].v = max(tr[u << 1].v, tr[u << 1 | 1].v) # 因为求区间最大值,modify之后需要更新区间最大值
def build(u, l, r):
global tr
tr[u] = Node(l, r)
if l == r:
return
mid = l + r >> 1
build(u << 1, l, mid)
build(u << 1 | 1, mid + 1, r)
def query(u, l, r):
global tr
# 如果查询的区间包含了当前u这个区间,那么直接返回u这个区间的信息
if l <= tr[u].l and r >= tr[u].r:
return tr[u].v
mid = tr[u].l + tr[u]. r >> 1
v = 0
if l <= mid:
v = query(u << 1, l, r)
if r > mid:
v = max(v, query(u << 1 | 1, l, r))
return v
# 单点修改,将x位置上的值修改为v
def modify(u, x, v):
global tr
if tr[u].l == x and tr[u].r == x:
tr[u].v = v
else:
mid = tr[u].l + tr[u].r >> 1
if x <= mid:
modify(u << 1, x, v)
else:
modify(u << 1 | 1, x, v)
# 修改之后要更新区间信息
tr[u].v = max(tr[u << 1].v, tr[u << 1 | 1].v)
m, p = map(int, input().strip().split()) # 因为L不会大于m,因此线段树区间右端点最大为m
# 初始化线段树
tr = [None for _ in range(4 * 200010)]
build(1, 1, m) # 第一个1表示区间的编号从1开始,第二个1和m表示根节点的区间是[1, m]
n = 0
last = 0 # 需要知道上一个询问的答案
while m:
m -= 1
opt = list(input().strip().split())
if opt[0] == 'A':
l = int(opt[1])
modify(1, n + 1, (l + last) % p)
n += 1
else:
l = int(opt[1])
last = query(1, n - l + 1, n)
print(str(last) + '\n')