HDU 5692 Snacks 百度之星2A

2021-07-12 01:08:43 字數 1773 閱讀 3457

題意就是根節點到

i 子樹上所有點的最大值,並且這棵樹上的點權可修改。

那麼維護所有點到根的和,如果修改乙個

u節點,只會改變根到

u 子樹上點的和。把樹用df

s序遍歷一下,把樹變成乙個序列,修改節點就變成了序列的區間修改,找最大值也變成了區間找最值。一棵線段樹搞定了。

複雜度:o(

mlog

n)

#pragma comment(linker, "/stack:1024000000,1024000000")

#include

#include

#include

#include

#include

#include

#include

#include

#include

#include

using

namespace

std;

typedef

long

long ll;

typedef

vector

vi;

typedef pair pii;

#define for(i,x,y) for(int i = x;i < y;++ i)

#define ifor(i,x,y) for(int i = x;i > y;-- i)

#define pb push_back

#define mp make_pair

#define fi first

#define se second

#define lrt rt<<1

#define rrt rt<<1|1

#define lson rt<<1,l,mid

#define rson rt<<1|1,mid+1,r

const

int maxn = 200010;

vi mat[maxn];

ll a[maxn],suf[maxn],w[maxn];

int n,m;

int tot,dfn[maxn],s[maxn],t[maxn];

void dfs(int u,int fa)

dfn[++tot] = u; t[u] = tot; w[tot] = suf[u];

}struct treetree[maxn<<2];

void pushup(int rt)

void pushdown(int rt)

}void build(int rt,int l,int r)

int mid = (l+r)>>1;

build(lson);

build(rson);

pushup(rt);

}void modify(int rt,int l,int r,int lazy)

pushdown(rt);

int mid = (tree[rt].l+tree[rt].r)>>1;

if(r <= mid) modify(lrt,l,r,lazy);

else

if(l > mid) modify(rrt,l,r,lazy);

else

pushup(rt);

}ll query(int rt,int l,int r)

void work()

else

}}int main()

return

0;}

hdu5692 Snacks 線段樹 dfs序

我們維護每個點到根的權值和。詢問過x的路徑中權值最大的,即詢問x的子樹中到根的距離最大的。修改x為y,則x的子樹中的所有點到根的距離都加上了y a x 顯然可以用dfn變成連續區間用線段樹來維護。pragma comment linker,stack 1024000000,1024000000 in...

android 百度sdk之 百度定位

步驟 1.控制台建立應用。2.sha1獲得 注意 debug 版本和release不同。debug版本獲取 首先 到c user android目錄下,我的是 c users admin android 其次 在這個目錄下,用cmd.輸入keytool v list keystore debug.k...

百度官方工具 百度站長平台

1 的提交和驗證 2 死鏈結提交 再也不用使用robots乙個乙個遮蔽死鏈結,直接在站長平台提交死鏈結就可以,如果死鏈結過多可以做成文件的形式,直接提交文件在根目錄的路徑就可以了。3 改版 改版功能是提供給站長改版時新老路徑替換的功能,方便將曾經的路徑跳轉到新的路徑,並且傳遞老路徑的權重。5 外鏈分...