Jzoj5662 尺樹寸泓

2021-08-19 03:14:09 字數 1420 閱讀 2236

平衡樹的問題,很容易想到中序遍歷

那麼我們給每乙個節點記錄一下中序遍歷中它子樹所在的區間,一次旋轉顯然只會改變兩個節點的值

對於詢問我們用線段樹區間求積就可以了

#pragma gcc optimize("o3")

#pragma g++ optimize("o3")

#include

#include

#include

#define n 200010

#define m 1000000007

#define ll long long

#define mid (l+r>>1)

#define ls l,mid,x<<1

#define rs mid+1,r,x<<1|1

using

namespace

std;

int clk,n,m,l[n],r[n],v[n];

int w[n],wl[n],wr[n],p[n],s[n],rk[n],rt;

int t[n<<2];

inline

void ps(int x)

inline

void dfs(int x)

inline

void build(int l,int r,int x)

build(ls);

build(rs);

t[x]=((ll)t[x<<1]*t[x<<1|1])%m;

}inline

void update(int l,int r,int x,int p,int k)

if(p<=mid) update(ls,p,k); else update(rs,p,k);

t[x]=((ll)t[x<<1]*t[x<<1|1])%m;

}inline ll query(int l,int r,int x,int l,int r)

int main()

for(int i=1;i<=n;++i) if(!p[i]) rt=i;

dfs(rt);

build(1,n,1);

for(int o,x,y;m--;) else rt=y;

ps(x); ps(y);

update(1,n,1,rk[x],s[x]);

update(1,n,1,rk[y],s[y]);

} else

if(o&&r[x]) else rt=y;

ps(x); ps(y);

update(1,n,1,rk[x],s[x]);

update(1,n,1,rk[y],s[y]);

}} }

}

命令提示OJ Problem 566

命令提示 執行時限 1000 ms 記憶體限制 256 mb 總提交 251次 通過 57次 題目描述 用過linux的shell的同學都知道,如果敲命令敲了一半,可以按tab鍵進行自動補全 條件是已經敲的字串是字典裡的某個字串字首 當然如果有多個候選項,那麼就不會補全。這種情況下,你多按幾次,sh...

566 重塑矩陣

在matlab中,有乙個非常有用的函式reshape,它可以將乙個矩陣重塑為另乙個大小不同的新矩陣,但保留其原始資料。給出乙個由二維陣列表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。如果具有給定引數的reshape...

566 重塑矩陣

在matlab中,有乙個非常有用的函式 reshape,它可以將乙個矩陣重塑為另乙個大小不同的新矩陣,但保留其原始資料。給出乙個由二維陣列表示的矩陣,以及兩個正整數r和c,分別表示想要的重構的矩陣的行數和列數。重構後的矩陣需要將原始矩陣的所有元素以相同的行遍歷順序填充。如果具有給定引數的reshap...