#pragma GCC optimize("Ofast,unroll-loops,O3")
#pragma GCC optimize("avx,avx2,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,fma,tune=native")
#include<bits/stdc++.h>
//#include<bits/extc++.h>
#pragma pack(1)
#define fast ios::sync_with_stdio(0); cin.tie(0);
#define pii pair<int,int>
#define x first
#define y second
#define N 200002
using namespace std;
//using namespace __gnu_pbds;
mt19937 rng(chrono::steady_clock::now().time_since_epoch().count());
//typedef tree<int, null_type,less_equal<int>, rb_tree_tag,tree_order_statistics_node_update> order_multiset;
//typedef tree<int, null_type,less<int>, rb_tree_tag,tree_order_statistics_node_update> order_set;
int n,L,loc[N],sz[N],fa[N],h[N];
vector<int>g[N];
struct BIT_2D{
vector<int>bit[44];
int n=0,m=18;
void init(int _n){
n=_n;
for (int i=0;i<=m;i++)
bit[i].resize(n+1,1);
}
void modify(int x,int y,int c){
x=m-x;
// cout<<"modify : "<<x<<' '<<y<<" "<<c<<'\n';
while (x<=m){
int ty=y;
while (ty<=n){
bit[x][ty]=(long long)(bit[x][ty])*(long long)c%(long long)L;
ty+=ty&(-ty);
}
x+=x&(-x);
}
}
long long query(int x,int y){
long long ans=1;
x=m-x;
// cout<<"query : "<<x<<' '<<y<<'\n';
while (x>0){
int ty=y;
while (ty>0){
ans=ans*(long long)(bit[x][ty])%L;
ty-=ty&(-ty);
}
x-=x&(-x);
}
return ans;
}
}cntl[N],cntr[N];
void dfs(int p,int lp){
fa[p]=lp;
for (auto i:g[p]){
if (i!=lp){
dfs(i,p);
sz[p]++;
loc[i]=sz[p];
}
}
}
signed main(){
fast
cin>>n>>L;
for (int i=1;i<n;i++){
int a,b; cin>>a>>b;
g[a].push_back(b);
g[b].push_back(a);
}
for (int i=1;i<=n;i++)
cin>>h[i];
dfs(1,0);
loc[1]=1; sz[0]=1;
for (int i=0;i<=n;i++){
sz[i]++;
cntl[i].init(sz[i]);
cntr[i].init(sz[i]);
}
int q; cin>>q;
while (q--){
int type,x,d,w; cin>>type;
if (type==1){
cin>>x>>d>>w;
cntl[x].modify(d,1,w);
for (int i=0;i<d;i++){
if (x==0) break;
int pos=loc[x];
// cout<<x<<" "<<fa[x]<<' '<<pos<<" "<<d-i+1<<'\n';
cntl[fa[x]].modify(d-i-1,pos+1,w);
cntr[fa[x]].modify(d-i-1,sz[fa[x]]-pos+1,w);
// cout<<"dis : "<<d-i+1<<" OK\n";
x=fa[x];
}
}
else {
cin>>x;
long long ans=h[x];
long long tans1=cntl[x].query(0,sz[x]),tans2;
ans=(ans*tans1)%L;
// cout<<" -> "<<tans1<<'\n';
for (int i=1;i<15;i++){
if (x==0) break;
int pos=loc[x];
tans1=cntl[fa[x]].query(i,pos);
tans2=cntr[fa[x]].query(i,sz[fa[x]]-pos);
// cout<<" -> "<<tans1<<' '<<tans2<<'\n';
ans=(ans*tans1%L*tans2)%L;
x=fa[x];
}
cout<<ans<<'\n';
}
}
}
Compilation message
sprinkler.cpp:2:88: warning: bad option '-favx' to pragma 'optimize' [-Wpragmas]
2 | #pragma GCC optimize("avx,avx2,sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,fma,tune=native")
| ^
sprinkler.cpp:2:88: warning: bad option '-favx2' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fsse' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fsse2' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fsse3' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fssse3' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fsse4' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fpopcnt' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fabm' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-fmmx' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-ffma' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:2:88: warning: bad option '-ftune=native' to pragma 'optimize' [-Wpragmas]
sprinkler.cpp:21:21: warning: bad option '-favx' to attribute 'optimize' [-Wattributes]
21 | void init(int _n){
| ^
sprinkler.cpp:21:21: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fsse' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fsse2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fsse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fssse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fsse4' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fpopcnt' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fabm' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-fmmx' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-ffma' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:21:21: warning: bad option '-ftune=native' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-favx' to attribute 'optimize' [-Wattributes]
26 | void modify(int x,int y,int c){
| ^
sprinkler.cpp:26:34: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fsse' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fsse2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fsse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fssse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fsse4' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fpopcnt' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fabm' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-fmmx' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-ffma' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:26:34: warning: bad option '-ftune=native' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-favx' to attribute 'optimize' [-Wattributes]
38 | long long query(int x,int y){
| ^
sprinkler.cpp:38:32: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fsse' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fsse2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fsse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fssse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fsse4' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fpopcnt' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fabm' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-fmmx' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-ffma' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:38:32: warning: bad option '-ftune=native' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-favx' to attribute 'optimize' [-Wattributes]
53 | void dfs(int p,int lp){
| ^
sprinkler.cpp:53:22: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fsse' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fsse2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fsse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fssse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fsse4' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fpopcnt' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fabm' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-fmmx' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-ffma' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:53:22: warning: bad option '-ftune=native' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-favx' to attribute 'optimize' [-Wattributes]
63 | signed main(){
| ^
sprinkler.cpp:63:13: warning: bad option '-favx2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fsse' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fsse2' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fsse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fssse3' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fsse4' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fpopcnt' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fabm' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-fmmx' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-ffma' to attribute 'optimize' [-Wattributes]
sprinkler.cpp:63:13: warning: bad option '-ftune=native' to attribute 'optimize' [-Wattributes]
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
244 ms |
421476 KB |
Output is correct |
2 |
Correct |
218 ms |
421392 KB |
Output is correct |
3 |
Correct |
267 ms |
421404 KB |
Output is correct |
4 |
Runtime error |
506 ms |
856860 KB |
Execution killed with signal 11 |
5 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
236 ms |
421516 KB |
Output is correct |
2 |
Correct |
2354 ms |
674460 KB |
Output is correct |
3 |
Correct |
1371 ms |
670860 KB |
Output is correct |
4 |
Correct |
1859 ms |
676196 KB |
Output is correct |
5 |
Correct |
1840 ms |
672472 KB |
Output is correct |
6 |
Correct |
1561 ms |
675764 KB |
Output is correct |
7 |
Correct |
1337 ms |
679464 KB |
Output is correct |
8 |
Correct |
1020 ms |
701556 KB |
Output is correct |
9 |
Correct |
2383 ms |
678824 KB |
Output is correct |
10 |
Correct |
1435 ms |
677448 KB |
Output is correct |
11 |
Correct |
2338 ms |
675352 KB |
Output is correct |
12 |
Correct |
1422 ms |
676188 KB |
Output is correct |
13 |
Correct |
992 ms |
703048 KB |
Output is correct |
14 |
Correct |
1002 ms |
703304 KB |
Output is correct |
15 |
Correct |
1131 ms |
703244 KB |
Output is correct |
16 |
Correct |
1142 ms |
702960 KB |
Output is correct |
17 |
Correct |
1392 ms |
703452 KB |
Output is correct |
18 |
Correct |
238 ms |
421588 KB |
Output is correct |
19 |
Correct |
219 ms |
421496 KB |
Output is correct |
20 |
Correct |
261 ms |
421464 KB |
Output is correct |
21 |
Correct |
226 ms |
421424 KB |
Output is correct |
22 |
Correct |
221 ms |
421456 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
236 ms |
421516 KB |
Output is correct |
2 |
Correct |
2354 ms |
674460 KB |
Output is correct |
3 |
Correct |
1371 ms |
670860 KB |
Output is correct |
4 |
Correct |
1859 ms |
676196 KB |
Output is correct |
5 |
Correct |
1840 ms |
672472 KB |
Output is correct |
6 |
Correct |
1561 ms |
675764 KB |
Output is correct |
7 |
Correct |
1337 ms |
679464 KB |
Output is correct |
8 |
Correct |
1020 ms |
701556 KB |
Output is correct |
9 |
Correct |
2383 ms |
678824 KB |
Output is correct |
10 |
Correct |
1435 ms |
677448 KB |
Output is correct |
11 |
Correct |
2338 ms |
675352 KB |
Output is correct |
12 |
Correct |
1422 ms |
676188 KB |
Output is correct |
13 |
Correct |
992 ms |
703048 KB |
Output is correct |
14 |
Correct |
1002 ms |
703304 KB |
Output is correct |
15 |
Correct |
1131 ms |
703244 KB |
Output is correct |
16 |
Correct |
1142 ms |
702960 KB |
Output is correct |
17 |
Correct |
1392 ms |
703452 KB |
Output is correct |
18 |
Correct |
238 ms |
421588 KB |
Output is correct |
19 |
Correct |
219 ms |
421496 KB |
Output is correct |
20 |
Correct |
261 ms |
421464 KB |
Output is correct |
21 |
Correct |
226 ms |
421424 KB |
Output is correct |
22 |
Correct |
221 ms |
421456 KB |
Output is correct |
23 |
Correct |
220 ms |
421480 KB |
Output is correct |
24 |
Correct |
2434 ms |
679448 KB |
Output is correct |
25 |
Correct |
1613 ms |
676124 KB |
Output is correct |
26 |
Correct |
1982 ms |
683328 KB |
Output is correct |
27 |
Correct |
1872 ms |
677872 KB |
Output is correct |
28 |
Correct |
1550 ms |
681332 KB |
Output is correct |
29 |
Correct |
1463 ms |
685424 KB |
Output is correct |
30 |
Correct |
1078 ms |
707820 KB |
Output is correct |
31 |
Correct |
2480 ms |
683232 KB |
Output is correct |
32 |
Correct |
1542 ms |
681472 KB |
Output is correct |
33 |
Correct |
2318 ms |
679396 KB |
Output is correct |
34 |
Correct |
1547 ms |
676300 KB |
Output is correct |
35 |
Correct |
227 ms |
421472 KB |
Output is correct |
36 |
Correct |
219 ms |
421584 KB |
Output is correct |
37 |
Correct |
218 ms |
421488 KB |
Output is correct |
38 |
Correct |
224 ms |
421504 KB |
Output is correct |
39 |
Correct |
222 ms |
421504 KB |
Output is correct |
40 |
Correct |
216 ms |
421444 KB |
Output is correct |
41 |
Correct |
226 ms |
421452 KB |
Output is correct |
42 |
Correct |
221 ms |
421412 KB |
Output is correct |
43 |
Correct |
219 ms |
421448 KB |
Output is correct |
44 |
Correct |
226 ms |
421496 KB |
Output is correct |
45 |
Correct |
220 ms |
421476 KB |
Output is correct |
46 |
Correct |
217 ms |
421508 KB |
Output is correct |
47 |
Correct |
221 ms |
421452 KB |
Output is correct |
48 |
Correct |
219 ms |
421584 KB |
Output is correct |
49 |
Correct |
221 ms |
421452 KB |
Output is correct |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
219 ms |
421576 KB |
Output is correct |
2 |
Runtime error |
1051 ms |
1048576 KB |
Execution killed with signal 11 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
225 ms |
421452 KB |
Output is correct |
2 |
Runtime error |
1008 ms |
1048704 KB |
Execution killed with signal 11 |
3 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Correct |
244 ms |
421476 KB |
Output is correct |
2 |
Correct |
218 ms |
421392 KB |
Output is correct |
3 |
Correct |
267 ms |
421404 KB |
Output is correct |
4 |
Runtime error |
506 ms |
856860 KB |
Execution killed with signal 11 |
5 |
Halted |
0 ms |
0 KB |
- |