Front-end performance optimization-6 large-angle comprehensive optimization solution

download: Front-end performance optimization-6 wide-angle comprehensive optimization solution

We often say that performance is always the first requirement. As a front-end engineer, no matter what framework you use, no matter what type of website or application development you are engaged in, as long as the project is used by users, performance optimization will always be your concern. Under normal circumstances, engineers can sum up the performance optimization scheme after deeply understanding the principles of front-end technology, which requires years of experience. Front-end technology is changing with each passing day, and excellent performance optimization solutions have also emerged in an endless stream in recent years. In this course, I will take you to use the very cutting-edge & professional solutions in today's industry to solve the problem of front-end performance optimization. Whether it is to solve practical problems at work or to improve your ability, this course can help you.

Suitable for the crowd
, front-end developers with 1-3 years of development experience
, graduates who have just entered the society

Technical reserve requires
HTML/CSS/JS
basic knowledge of Webpack, React, Node.js
IL void access(int x) {//Open up the path from the root node to x, x is the deepest
for(R y=0; x; x =fa(y=x)) {
splay(x),rs(x)=y,pushup(x);
}
}
Make_root(x): Turn x into the root node

IL void makeroot(int x) {//Change x to the root of the original tree
access(x),splay(x),Rev(x);
}
Find_root(x): find the root node where x is

IL int findroot(int x) {//Find the root of the original tree of
x access(x),splay(x);
while(ls(x)) pushdown(x),x=ls(x);
return x;
}
Spilt(x,y): Turn the path from x to y into a real-edge path

IL void split(int x,int y) {//y Maintain information on the xy path
makeroot(x),access(y),splay(y);
}
Link(x,y): If x,y are not connected, Then join the (x, y) side

IL void link(int x,int y) {
makeroot(x);if(findroot(y)!=x) fa(x)=y;
}
Cut(x,y): If there is an edge between x and y, Delete the edge

IL void cut(int x,int y) {
split(x,y);
if(fa(x)==y&&rs(x)==0) fa(x)=ls(y)=0,pushup(y) ;
}
Isroot(x): Determine whether x is the root node of the splay

IL int nroot(int x) //return 1 to clarify that x is not the root, return 0 to clarify that x is the root
{return ls(fa(x))==x||rs(fa(x))==x;}
P3690 【 Template] Link Cut Tree (Dynamic Tree)
Adorable New Code ~ Code Wind Learned From Yu Team

![]()![]()```
1 #include<bits/stdc++.h>
2 #define IL inline
3 #define R register int
4 #define ls(x) a[x].ch[0]
5 #define rs(x) a[x].ch[1]
6 #define fa(x) a[x].fa
7
8 using namespace std;
9 const int N=1e5+5,inf=0x3f3f3f3f;
10
11 IL int read() {
12 int f=1;
13 char ch;
14 while((ch=getchar())<'0'||ch>'9') if(ch=='-') f=-1;
15 int res=ch-'0';
16 while((ch=getchar())>='0'&&ch<='9') res=res10+ch-'0';
17 return resf;
18 }
19
20 int n,m;
21 struct hh {
22 int ch[2],fa,val,rev,sum;
23 } a[N];25 IL int chk (int x) {return x == rs (fa (x));}
24

26 IL void Rev(int x) {swap(ls(x),rs(x));a[x].rev^=1;}
27 IL void pushup(int x) {a[x].sum=a[ls(x)].sum^a[rs(x)].sum^a[x].val;}
28 IL int nroot(int x) //返回1阐明x不是根,返回0阐明x是根
29 {return ls(fa(x))==x||rs(fa(x))==x;}
30
31 IL void pushdown(int x) {
32 if(a[x].rev) {
33 a[x].rev=0;
34 if(ls(x)) Rev(ls(x));
35 if(rs(x)) Rev(rs(x));
36 }
37 }
38
39 IL void pushall(int x) {
40 if(nroot(x)) pushall(fa(x));
41 pushdown(x);
42 }
43
44 IL void rotate(int x) {
45 int y=fa(x),z=fa(y),k=chk(x),w=a[x].ch[k^1];
46 if(nroot(y)) a[z].ch[chk(y)]=x;fa(x)=z;
47 if(w) fa(w)=y;a[y].ch[k]=w;
48 fa(y)=x;a[x].ch[k^1]=y;
49 pushup(y);pushup(x);
50}
51
52 IL void splay(int x) {//turn x To the root of splay
53 pushall(x);
54 while(nroot(x)) {
55 int y=fa(x);
56 if(nroot(y)) rotate(chk(x)^chk(y)?x: y);
57 rotate(x);
58}
59}
60
61 IL void access(int x) {//Open up the path from the root node to x, x is the deepest
62 for(R y=0; x; x=fa( y=x)) {
63 splay(x),rs(x)=y,pushup(x);
64}
65}
66
67 IL void makeroot(int x) {//change x to the root of the original tree
68 access (x),splay(x),Rev(x);
69}
70
71 IL int findroot(int x) {//Find the root of the original tree of
x 72 access(x),splay(x);
73 while(ls (x)) pushdown(x),x=ls(x);
74 return x;
75 }
76
77 IL void split(int x,int y) {//y維護x-y途径上的信息
78 makeroot(x),access(y),splay(y);
79 }
80
81 IL void link(int x,int y) {
82 makeroot(x);if(findroot(y)!=x) fa(x)=y;
83 }
84
85 IL void cut(int x,int y) {
86 split(x,y);
87 if(fa(x)==y&&rs(x)==0) fa(x)=ls(y)=0,pushup(y);
88 }
89
90 int main() {
91 n=read();
92 m=read();
93 for(R i=1; i<=n; ++i) a[i].val=a[i].sum=read();
94 while(m--) {
95 int op=read(),x=read(),y=read();
96 if(!op) split(x,y),printf("%d\n",a[y].sum);
97 else if(op==1) link(x,y);
98 else if(op==2) cut(x,y);
99 else makeroot(x),a[x].val=y,pushup(x);
100 }
101 return 0;
102 }

Guess you like

Origin blog.51cto.com/15134646/2665115