首先整体二分,问题变成是否存在经过一个点的满足条件的路径 那么我对于每个路径(a,b,lca),在树状数组的dfn[a]++,dfn[b]++,dfn[lca]--,dfn[fa[lca]--] 然后直接查那个点的子树和就行了 #include<bits/stdc++.h> #define CLR(a,x) memset(a,x,sizeof(a)) #define MP make_pair using namespace std; typedef long long ll; typedef…
解法1: 本题有插入路径和删除路径,在每个节点维护插入堆和删除堆,查询时两者top一样则一直弹出.如果每个节点维护的是经过他的路径,显然有些不好处理,正难则反,每个点维护不经过他的路径,那么x节点出了故障时,我们就查询x,查询到的就是x出故障后不受影响的路径. (洛谷上有一个点一直过不了,似乎是之后加强过的数据). 1 #include<bits/stdc++.h> 2 using namespace std; 3 const int N=200010; 4 int tot,sum,head[…
整体二分+二维树状数组. 好题啊!写了一个来小时. 一看这道题,主席树不会搞,只能用离线的做法了. 整体二分真是个好东西,啥都可以搞,尤其是区间第 \(k\) 大这种东西. 我们二分答案,然后用二维树状数组实现 \(\log^2 n\) 的单点修改,时间复杂度 \(O(q\log^2 n\log 10^9)\) \(Code\ Below:\) #include <bits/stdc++.h> #define lowbit(x) ((x)&(-(x))) #define id(x,y)…
题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入 第一行两个数N,Q,表示矩阵大小和询问组数:接下来N行N列一共N*N个数,表示这个矩阵:再接下来Q行每行5个数描述一个询问:x1,y1,x2,y2,k表示找到以(x1,y1)为左上角.以(x2,y2)为右下角的子矩形中的第K小数. 输出 对于每组询问输出第K小的数. 样例输入 2 2 2 1 3 4 1 2 1 2 1 1 1 2 2 3 样例输出 1 3 题解 整体二分+二维树状数组 题目答案具有很明显的…
题目描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入   第一行两个数N,Q,表示矩阵大小和询问组数:接下来N行N列一共N*N个数,表示这个矩阵:再接下来Q行每行5个数描述一个询问:x1,y1,x2,y2,k表示找到以(x1,y1)为左上角.以(x2,y2)为右下角的子矩形中的第K小数. 输出 对于每组询问输出第K小的数. 样例输入 2 2 2 1 3 4 1 2 1 2 1 1 1 2 2 3 样例输出 1 3 提示 矩阵中数字是109以内的非负整数:20%…
建出AC自动机及其fail树,每次给新加入的串在AC自动机上经过的点染色,问题即转化为子树颜色数.显然可以用dfs序转成序列问题树状数组套权值线段树解决,显然过不掉.事实上直接树上差分,按dfs序排序后lca处-1,树状数组维护子树和即可. 又一次写了cmp后没放进sort,心态爆炸. #include<iostream> #include<cstdio> #include<cmath> #include<cstdlib> #include<cstri…
题目链接 BZOJ 洛谷 整体二分.把求序列第K小的树状数组改成二维树状数组就行了. 初始答案区间有点大,离散化一下. 因为这题是一开始给点,之后询问,so可以先处理该区间值在l~mid的修改,再处理询问.即二分标准可以直接用点的标号. 结构体的赋值可以改为赋值操作的编号.(这样内存没那么连续?想多了你) 改了半下午,优化了500ms.. //6980kb 10584ms 好慢啊QAQ //4208ms 7.59MB #include <cstdio> #include <cctype&…
[题目链接] http://www.lydsy.com/JudgeOnline/problem.php?id=2738 [题目大意] 给出一个方格图,询问要求求出矩阵内第k小的元素 [题解] 我们对答案的大小进行整体二分,用二维树状数组维护二维区间和, 将超过数量的分治到左区间,不满足的分治到右区间即可. [代码] #include <cstdio> #include <algorithm> #include <cstring> using namespace std;…
试题来源 2012中国国家集训队命题答辩 问题描述 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. 输入格式 第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N*N个数,表示这个矩阵: 再接下来Q行每行5个数描述一个询问:x1,y1,x2,y2,k表示找到以(x1,y1)为左上角.以(x2,y2)为右下角的子矩形中的第K小数. 输出格式 对于每组询问输出第K小的数. 样例输入 2 2 2 1 3 4 1 2 1 2 1 1 1 2 2 3 样例输出 1…
2738: 矩阵乘法 Time Limit: 20 Sec  Memory Limit: 256 MBSubmit: 1643  Solved: 715[Submit][Status][Discuss] Description 给你一个N*N的矩阵,不用算矩阵乘法,但是每次询问一个子矩形的第K小数. Input   第一行两个数N,Q,表示矩阵大小和询问组数: 接下来N行N列一共N*N个数,表示这个矩阵: 再接下来Q行每行5个数描述一个询问:x1,y1,x2,y2,k表示找到以(x1,y1)为左…