


I am very happy to see this question. I have the impression that it is very similar to what I have done before. It seems that I have done one recently, using timestamps as intervals to build a tree array. Then at first I thought the question meant, give x If you add val to a point, -val will be added to all nodes below it; so at the beginning, two tree arrays were established by adding and subtracting, and finally subtracting is the answer. After writing it, I found that it does not match the case. After reading the question, I didn’t find that I read it wrong. I misunderstood that sentence. Then I read this:
http://blog.csdn.net/keshuai19940722/article/details/18967661
Look carefully at the processing part. I I thought there were rules for dividing parity, but later I found out that I had read the question wrong. It turned out to be x point plus val, the child nodes directly connected to it plus -val, and the child nodes of its child nodes plus val. analogy. . . Ha ha. . Cry
The method is the same as the previous question. For this tree, perform dfs, and record the relationship between the distance and the current layer number, expressed as odd and even numbers, and then use the timestamp of each node being dfs Establish an interval to map the tree array to it, and finally separate the odd and even numbers. The additions are in one tree array, and the subtractions are in another. Then when the single point value is finally calculated, it is the distance between the point and the root node. That is, the value that should be added by itself is subtracted from the corresponding value that should be subtracted from another tree array. Then, the value of each node itself is not added to the tree array at the beginning, and the original value must be added. has a value, this is the answer
Then I did it with a line segment tree, also using the timestamp, and recording the parity of this node from the root, and then also established two line segment trees, one record Odd number processing, one record even number processing, but I don’t know where I wrote it wrong. I revised it for a long time, but when it didn’t work, I wrote it again. I really forgot what I learned. . .
For tree array:
int n;int m;int c[2][200000 * 2 + 55];typedef struct Node { int l,r,val; int now;};Node node[200000 + 55];vector<int> G[200000 + 55];int cnt;void init() { memset(c,0,sizeof(c)); for(int i=0;i>n>>m) { for(int i=1;i>node[i].val; int tmp = n - 1; while(tmp--) { int u,v; scanf("%d %d",&u,&v); G[u].push_back(v); G[v].push_back(u); } return false; } return true;}int lowbit(int x) { return x&(-x);}void add(int i,int val,int *aa) { while(i 0) { sum += aa[i]; i -= lowbit(i); } return sum;}void dfs(int u,int pre,int tot) { node[u].l = cnt++; node[u].now = tot; for(int i=0;i<g int v="G[u][i];" if pre dfs node cnt cal while type cin>>type; if(type == 1) { int x,y; cin>>x>>y; //int tmp = node[x].now; //int aa = node[x].l; //int bb = node[x].r; add(node[x].l,y,c[node[x].now]); add(node[x].r + 1,-y,c[node[x].now]); } else { int x; cin>>x; //int aa = (get_sum(node[x].l,c[node[x].d]) /*- get_sum(node[x].l - 1,c[node[x].d])*/); //int bb = (get_sum(node[x].l,c[node[x].d^1])/* - get_sum(node[x].l - 1,c[node[x].d^1])*/); //int cc = 0; int ans = get_sum(node[x].l,c[node[x].now]) - get_sum(node[x].l,c[node[x].now^1]); ans += node[x].val; cout <br> <br> <p></p> <p>For line segment tree: </p> <p></p> <pre name="code" class="sycode">const int N = 200000 + 55;int n;int m;int nnum[N + 55];int le[N + 55],ri[N + 55],belong[N + 55];int head[N + 55];typedef struct Node { int l,r; ll sum; int lazy;};Node tree_even[N * 4 + 55],tree_odd[N * 4 + 55];typedef struct NODE { int fro,to; int nex;};NODE edge[2 * N + 55];int tot;int cnt;void add(int u,int v) { edge[tot].fro = u; edge[tot].to = v; edge[tot].nex = head[u]; head[u] = tot++;}void dfs(int u,int pre,int d) { le[u] = ++cnt; for(int i=head[u];i!=-1;i=edge[i].nex) { int v = edge[i].to; if(v == pre)continue; dfs(v,u,d^1); } belong[le[u]] = d; ri[le[u]] = cnt;}void push_up(int id,Node *tree) { tree[id].sum = tree[id>1; build(l,mid,id>1; if(r mid)update(l,r,id>1; ll ret = 0ll; if(r mid)ret += query(l,r,id>n>>m) { for(int i=1;i>nnum[i]; for(int i=1;i<n int u cin>>u>>v; add(u,v); add(v,u); } return false; } return true;}void cal() { dfs(1,-1,1); build(1,n,1,tree_even); build(1,n,1,tree_odd); while(m--) { int type; cin>>type; if(type == 1) { int x,y; cin>>x>>y; int left = le[x]; int right = ri[left]; if(belong[left]&1) update(left,right,1,y,tree_odd); else update(left,right,1,y,tree_even); } else { int x; cin>>x; int left = le[x]; ll ans; if(belong[left]&1) ans = query(left,left,1,tree_odd) - query(left,left,1,tree_even); else ans = query(left,left,1,tree_even) - query(left,left,1,tree_odd); ans += nnum[x]; cout <br> <br> <p></p> </n>

The official account web page update cache, this thing is simple and simple, and it is complicated enough to drink a pot of it. You worked hard to update the official account article, but the user still opened the old version. Who can bear the taste? In this article, let’s take a look at the twists and turns behind this and how to solve this problem gracefully. After reading it, you can easily deal with various caching problems, allowing your users to always experience the freshest content. Let’s talk about the basics first. To put it bluntly, in order to improve access speed, the browser or server stores some static resources (such as pictures, CSS, JS) or page content. Next time you access it, you can directly retrieve it from the cache without having to download it again, and it is naturally fast. But this thing is also a double-edged sword. The new version is online,

The article discusses using HTML5 form validation attributes like required, pattern, min, max, and length limits to validate user input directly in the browser.

This article demonstrates efficient PNG border addition to webpages using CSS. It argues that CSS offers superior performance compared to JavaScript or libraries, detailing how to adjust border width, style, and color for subtle or prominent effect

Article discusses best practices for ensuring HTML5 cross-browser compatibility, focusing on feature detection, progressive enhancement, and testing methods.

The article discusses the HTML <datalist> element, which enhances forms by providing autocomplete suggestions, improving user experience and reducing errors.Character count: 159

The article discusses the HTML <meter> element, used for displaying scalar or fractional values within a range, and its common applications in web development. It differentiates <meter> from <progress> and ex

This article explains the HTML5 <time> element for semantic date/time representation. It emphasizes the importance of the datetime attribute for machine readability (ISO 8601 format) alongside human-readable text, boosting accessibilit

The article discusses the HTML <progress> element, its purpose, styling, and differences from the <meter> element. The main focus is on using <progress> for task completion and <meter> for stati


Hot AI Tools

Undresser.AI Undress
AI-powered app for creating realistic nude photos

AI Clothes Remover
Online AI tool for removing clothes from photos.

Undress AI Tool
Undress images for free

Clothoff.io
AI clothes remover

AI Hentai Generator
Generate AI Hentai for free.

Hot Article

Hot Tools

SAP NetWeaver Server Adapter for Eclipse
Integrate Eclipse with SAP NetWeaver application server.

EditPlus Chinese cracked version
Small size, syntax highlighting, does not support code prompt function

Dreamweaver Mac version
Visual web development tools

Notepad++7.3.1
Easy-to-use and free code editor

VSCode Windows 64-bit Download
A free and powerful IDE editor launched by Microsoft
