栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Python

蓝桥杯 第十九天 树状数组&差分

Python 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

蓝桥杯 第十九天 树状数组&差分

目录

1.1270. 数列区间最大值 - AcWing题库

2.1215. 小朋友排队 - AcWing题库

3.797. 差分 - AcWing题库

4.二维差分


1.1270. 数列区间最大值 - AcWing题库

python日常超时

def pushup(u):
    tree[u][0]=max(tree[u<<1][0],tree[u<<1|1][0])
    return
def build(u,l,r):
    if l==r:
        tree[u]=[w[l],l,r]
    else:
        tree[u]=[0,l,r]
        mid=l+r>>1
        build(u<<1,l,mid)
        build(u<<1|1,mid+1,r)
        pushup(u)
    return

def query(u,l,r):
    if tree[u][1]>=l and tree[u][2]<=r:
        return tree[u][0]
    else:
        maxium=0
        mid=tree[u][1]+tree[u][2]>>1
        if l<=mid:

            maxium=max(maxium,query(u<<1,l,r))
        if r>mid:
            maxium=max(maxium,query(u<<1|1,l,r))
        return maxium

N=10004
n,m=map(int,input().split())
w=[0]+list(map(int,input().split()))
tree=[[]for i in range(4*N)]
build(1,1,n)
for _ in range(m):
    x,y=map(int,input().split())
    print(query(1,x,y))

2.1215. 小朋友排队 - AcWing题库
N=1000005
def lowbit(x):
    return x&-x
def add(x,v):
    i=x
    while i0:
        sums+=tree[i]
        i-=lowbit(i)
    return sums

n=int(input())
a=[0]+list(map(int,input().split()))
a=list(map(lambda x:x+1,a))
tree=[0 for i in range(N+1)]
sums=[0 for i in range(n+1)]
for i in range(1,n+1):
    sums[i]=query(N-1)-query(a[i])
    add(a[i],1)
tree=[0 for i in range(N+1)]
for i in range(n,0,-1):
    sums[i]+=query(a[i]-1)
    add(a[i],1)
ans=0
for i in range(1,n+1):
    ans+=sums[i]*(sums[i]+1)//2
print(ans)

3.797. 差分 - AcWing题库
def add(l,r,v):
    b[l]+=v
    if r+1<=n:
        b[r+1]-=v
    return
n,m=map(int,input().split())
a=[0]+list(map(int,input().split()))
b=[0 for i in range(n+1)]
for i in range(1,n+1):
    add(i,i,a[i])
for _ in range(m):
    l,r,c=map(int,input().split())
    add(l,r,c)
for i in range(1,n+1):
    b[i]+=b[i-1]
    print(b[i])

4.二维差分

二维差分的核心代码

def add(x1,y1,x2,y2,v):
    b[x1][y1]+=v
    b[x2+1][y2+1]+=v
    b[x2+1][y1]-=v
    b[x1][y2+1]-=v

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/740677.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号