description
平日裡寫has
hhash
hash
的時候,總有某些選手由於臉黑而導致慘遭卡模數,然後一些惡意卡模數的出題人也因此身敗名裂。為了防止被卡,我們用一種高階的隨機方式來代替原來的線性隨機生成,也就是所謂的隨機樹!
現在有一棵編號為0
00~n−1
n-1n−
1的有根樹,其中0
00是樹的根。每個節點初始有乙個值t
it_i
ti。現在要求支援一下兩種操作:
1.
1.1.
給出兩個正整數u
uu和x
xx,我們將t
ut_u
tu的值乘以x
xx,我們將這種操作稱為see
dseed
seed
操作。2.
2.2.
給出乙個正整數i
ii,詢問s
is_i
si以及它一共有多少個正約數。其中s
is_i
si表示以i
ii為根的子樹所有點的權值的乘積,我們將這種操作稱為ran
drand
rand
操作。容易發現,這樣得到的答案還是很隨機的。(其實不是)
你需要回答每一次的詢問,由於乙個數的約數個數可能非常多,這個數也可以非常大,你只需要把答案對109
+7
10^9+7
109+
7取模就可以了。
input
第一行乙個正整數n
nn,表示節點個數。
接下來n−1
n-1n−
1行,每行兩個正整數u
uu和v
vv,表示u
uu是v
vv的父節點。
接下來一行n
nn個正整數,分別表示每個節點的初始權值t
it_i
ti。
接下來一行乙個正整數q
qq,表示操作的個數。
接下來q
qq行,每行是以下兩種情況之一:
1. se
edux
1.seed\ u\ x
1.seed
ux: 表示將u
uu節點的權值乘以xxx。
2. ra
nd
i2.rand\ i
2.rand
i: 表示詢問s
is_i
si以及它一共有多少個正約數。
資料保證在任意時刻,每個點的權值不可能擁有超過13
1313
的素因子,也就是說,每個數的素因子最多只有2,3
,5,7
,11,13
2,3,5,7,11,13
2,3,5,
7,11
,13這六種可能。
( 1≤
n,q≤
105,
1≤x≤
109)
(1\le n,q\le 10^5,1\le x\le 10^9)
(1≤n,q
≤105
,1≤x
≤109
) output
每一行兩個整數,對應乙個ran
drand
rand
操作,你需要輸出所求的權值以及它的正約數個數,答案對於109
+7
10^9+7
109+
7取模即可。
sample input8
0 10 2
1 32 4
2 53 6
3 77 3 10 8 12 14 40 15
3rand 1
seed 1 13
rand 1
sample output
14400 63
187200 126
solution
線段樹維護區間中每個素因子冪指數之和,支援單點修改和區間求和,時間複雜度o(6
(n+q
)log
n)
o(6(n+q)logn)
o(6(n+
q)lo
gn)
code
#include#include#include#include#include#include#include#include#include#includeusing namespace std;
typedef long long ll;
typedef pairp;
const int inf=0x3f3f3f3f,maxn=100005;
#define mod 1000000007
int add(int x,int y)
int mul(int x,int y)
int pow(int x,int y)
return ans;
}int p=;
#define ls (t<<1)
#define rs ((t<<1)|1)
struct node
node operator+(const node &b)const
int val()
}t[maxn<<2];
void push_up(int t)
void modify(int x,int l,int r,int t,node v)
int mid=(l+r)/2;
if(x<=mid)modify(x,l,mid,ls,v);
else modify(x,mid+1,r,rs,v);
push_up(t);
}node query(int l,int r,int l,int r,int t)
node solve(int n)
int n,m,a[maxn],l[maxn],r[maxn],dfn=0;
vectorg[maxn];
void dfs(int u)
int main()
dfs(0);
for(int i=0;iscanf("%d",&m);
while(m--)
else
}return 0;
}
Newcoder 128 C 尋寶(樹形DP)
description 由依是戰線佯攻部隊的輔助人員,在岩澤消失之後,企圖代替岩澤成為gdm gdmgd m主唱。但是sss sssss s戰線的領袖仲村由理是不會輕易讓她加入的,於是由理子給了由依一項艱鉅的任務 去乙個地下迷宮尋找寶石 這個迷宮由n nn個房間組成,編號為0 00到n 1 n 1n...
Newcoder 70 C 幸運數字 (水 )
description 定義乙個數字為幸運數字當且僅當它的所有數字都是4 44或者777。比如說,47 744 4 47 744 4 47 744 4都是幸運數字而5 17 467 5 17 467 5 17 4 67都不是。假設現在有乙個數字d dd,現在想在d dd上重複k kk次操作。假設d ...
Leetcode 38 外觀數列 C
外觀數列 是乙個整數序列,從數字 1 開始,序列中的每一項都是對前一項的描述。前五項如下 1.1 2.11 3.21 4.1211 5.1112211 被讀作 one 1 乙個一 即 11。11 被讀作 two 1s 兩個一 即 21。21 被讀作 one 2 one 1 乙個二 乙個一 即 121...