luogu P7710 [Ynoi2077] stdmxeypz

news/2024/11/13 4:25:39/

https://www.luogu.com.cn/problem/P7710

相当于是这题丢到树上的版本
luogu P5309 [Ynoi2011] 初始化

不太会去掉log,
考虑一个修改i对一个询问j有几个限制,首先是时间 t i < t j t_i<t_j ti<tj这一维,
第二维是要满足 l i < l j < = r i l_i<l_j<=r_i li<lj<=ri
第三维是 d e p [ u j ] = d e p [ u i ] + y ( m o d x ) dep[u_j]=dep[u_i]+y(\mod x) dep[uj]=dep[ui]+y(modx)

第三维按照上面那个套路搞个阈值分治即可

加几个卡常技巧即可
code:

#include<bits/stdc++.h>
#define N 600050
using namespace std;
inline int read() {register int x = 0;register char ch = getchar();for(; ch < '0' || ch > '9'; ) ch = getchar();for(; ch >= '0' && ch <= '9'; ) x = (x << 3) + (x << 1) + (ch - 48), ch = getchar();return x;
}
inline void PRT(register int x) {int s[20], top = 0;while(x) s[++ top] = x % 10, x /= 10;if(!top) s[++ top] = 0;while(top) putchar(s[top --] + '0');puts("");
}
struct edge {int v, nxt;
} e[N << 1];
int p[N], eid;
void init() {memset(p, -1, sizeof p);eid = 0;
}
inline void insert(int u, int v) {e[eid].v = v;e[eid].nxt = p[u];p[u] = eid ++;
}
int n, m, dfn, tot, gs, L[N], R[N], dep[N], s1[606][606], s2[N], blo, ans[N << 2];
int ss1[606][606], ss2[N], py[N], ss0[N];
void dfs(int u) {L[u] = ++ dfn;py[dfn] = u;for(int i = p[u]; i + 1; i = e[i].nxt) {int v = e[i].v;dep[v] = dep[u] + 1;dfs(v);}R[u] = dfn;
}
inline void update(int x, register int y, int o) {if(x <= blo) s1[x][y] += o;else for(; y <= n; y += x) s2[y] += o;
}
inline int query(int x) {int ret = s2[x];for(register int i = 1; i <= blo; i ++) ret += s1[i][x % i];return ret;
}
inline void clear(int x, register int y) {if(x <= blo) s1[x][y] = 0;else for(; y <= n; y += x) s2[y] = 0;
}
struct Q {int l, x, y, o, id;
} q[N << 2], ls[N << 2];
void cdq(int l, int r) {if(l == r) return ;int mid = (l + r) >> 1;cdq(l, mid), cdq(mid + 1, r);int i = l, j = mid + 1, k = l - 1;while(i <= mid && j <= r) {if(q[i].l <= q[j].l) {if(!q[i].id) update(q[i].x, q[i].y, q[i].o);ls[++ k] = q[i ++];} else {if(q[j].id) ans[q[j].id] += query(q[j].x);ls[++ k] = q[j ++];}}while(j <= r) {if(q[j].id) ans[q[j].id] += query(q[j].x);ls[++ k] = q[j ++];}for(int w = l; w < i; w ++) if(!q[w].id) clear(q[w].x, q[w].y);while(i <= mid) {ls[++ k] = q[i ++];}for(int i = l; i <= r; i ++) q[i] = ls[i];
}
int main() {init();n = read(), m = read();for(int i = 2; i <= n; i ++) {int x;x = read();insert(x, i);}blo = sqrt(n);dfs(1);//for(int i = 1; i <= n; i ++) printf("%d ", dep[i]); printf("\n");for(int i = 1; i <= m; i ++) {int o, u, x, y, op;op = read(), u = read();if(op == 2) {q[++ tot] = (Q){L[u], dep[u], 0, 0, ++ gs};ans[gs] += ss0[u] + ss2[dep[u]];for(int j = 1; j <= blo; j ++)ans[gs] += ss1[j][dep[u] % j];//, printf("*%d*", ss1[j][dep[u] % j]);}else {x = read(), y = read(), o = read();y = (y + dep[u]) % x;q[++ tot] = (Q){L[u], x, y, o, 0};if(L[u] <= blo) {tot --;if(x <= blo) ss1[x][y] += o;else for(int j = y; j <= n; j += x) ss2[j] += o;for(int j = 1; j < L[u]; j ++) {int v = py[j];if(dep[v] % x == y) ss0[v] -= o;}}q[++ tot] = (Q){R[u] + 1, x, y, -o, 0};if(R[u] + blo >= n) {tot --;for(int j = R[u] + 1; j <= n; j ++) {int v = py[j];if(dep[v] % x == y) ss0[v] -= o;}}}}cdq(1, tot);for(int i = 1; i <= gs; i ++) PRT(ans[i]);return 0;
}

http://www.ppmy.cn/news/185284.html

相关文章

串口通信波特率数据错乱

如图,串口助手有两种模式,分别是hex模式和文本模式,但是我在测试发送数据时,16进制遇见了奇怪的现象. switch(tempbuf){case 0: P2_00;//unsigned char tempbuf;break;//tempbuf SBUF;case 15: P2_10;break;case 16: P2_20;break;case 48: P2_30;break;default: P20XFF;} 代…

华为 Eth-trunk 配置IP

华为Eth-trunk可以用于三层 通过对Eth-trunk配置实现路由器的提高带宽&#xff0c;负载均衡。 三层Eth-trunk案例&#xff1a; R1配置&#xff1a; <Huawei>system-view ##进入系统视图 [Huawei]sysname R1 …

Win10 升级Win11 如何启用 TPM(受信任的平台模块)Dell电脑

Win10 升级Win11 如何启用 TPM&#xff08;受信任的平台模块&#xff09;Dell电脑 打算将电脑系统由Win10 升级Win11微软官方提供了升级助手软件和前置条件检测软件&#xff0c;我电脑提示要求打开TPM 2.0&#xff0c;微软提供了各种型号电脑如何启用TPM 2.0的链接&#xff0c…

静态路由命令及配置【华为】

静态路由由网络管理员手动配置&#xff0c;配置方便&#xff0c;对系统要求低&#xff0c;适用于拓扑结构简单并且稳定的小型网络。 缺点是不能自动适应网络拓扑的变化&#xff0c;需要人工干预。 配置命令 1、关联下一跳IP的方式 [Huawei] ip route-static ip-address { mas…

计算机应用基础题,2017计算机应用基础模拟试题及答案

一、单项选择题***本大题共40小题&#xff0c;每小题1分&#xff0c;共40分***在每小题列出的四个选项中只有一个选项是符合题目要求的&#xff0c;请将正确选项前的字母填在题后的括号内。 1.一个完整的微型计算机系统包括***  *** A.主机箱、键盘、显示器和打印机 B.系统软…

Rockchip安卓11.0 16k wbs msbc HFP PCM语音通话支持

Rockchip安卓11.0 16k wbs/msbc HFP PCM语音通话支持 调试平台: 安卓11.0, rk3328, 博通ap6212芯片, HFP 8K已经调通的情况下. SDK修改支持16k wbs/msbc HFP PCM语音注意点如下: 1. bluedroid(system/bt) 博通方案中, ESCO_DATA_PATH_PCM 为1代表蓝牙芯片作为pcm master, 6…

android录像时报fatal exception: main,react native 插入原生运行报错:FATAL EXCEPTION: main...

问题描述 09-16 06:44:58.610 10707-10707/com.example.base E/AndroidRuntime: FATAL EXCEPTION: main Process: com.example.base, PID: 10707 java.lang.RuntimeException: Unable to start activity ComponentInfo{com.example.base/com.example.base.MyReactActivity}: ja…

CrackMe160 学习笔记 之 009

前言 这个程序同样需要我们写出正确的KEY&#xff0c;是008的升级版。 附上一张攻破后的图。 思路 首先输入任意字符&#xff0c;来到验证函数处。 004022AE . FF15 48414000 call dword ptr [<&MSVBVM50.__vbaVarTs>; \__vbaVarTstEq看函数名猜测是判断两…