Description 一条 \(n\) 条边,\(n+1\) 个点的链,边有黑有白.若结点 \(a\) 可以到达 \(b\),需要满足 \(a\to b\) 的路径上的边不能有黑的.现给出 \(0\) 时刻边的初始状态,然后随后 \(1\sim q\) 时刻每时刻有一个事件或查询: \(\texttt{toggle} \ i\):翻转第 \(i\) 条边的颜色(黑 \(\Leftrightarrow\) 白) \(\texttt{query}\ a\ b\):查询从 \(0\) 开始到当前时刻…
[LOJ#3146][APIO2019]路灯(树套树) 题面 LOJ 题解 考场上因为\(\text{bridge}\)某个\(\text{subtask}\)没有判\(n=1\)的情况导致我卡了\(3.5h\)左右,然后这题就只能匆匆\(rush\)了一个\(60\)分暴力...... 考虑维护出每一个时刻的亮的灯的连续段,那么对于连续段\([l,r]\),显然此时刻在区间内的任意一组询问都会被产生贡献. 因为维护连续段非常不好处理,所以考虑每一个未开灯的地方的影响. 假设\(x\)位置未开灯…
传送门 BZOJ上的题目没有题面-- [样例输入] 3 5 2 4 3 Query 2 2 Modify 1 3 Query 2 2 Modify 1 2 Query 1 1 [样例输出] 2 3 3 这道题稍微分析一下就知道是求一个一个点曼哈顿距离小于k的的范围内的点的个数(把下标看做x,把值看做y).然后我们只需要旋转一下坐标轴就变成了和"Mokia"或"简单题"一样的CDQ分治裸题了,求二维空间前缀和. 首先将询问按x排序,然后开始分治过程,计算左半区间对右半…
[题意] 每次删除一个数,然后问删除前逆序对数. [分析] 没有AC不开心.. 我的树状数组套字母树,应该是爆空间的,空间复杂度O(nlogn^2)啊..哭.. 然后就没有然后了,别人家的树套树是树状数组套平衡树,O(nlogn)的啊.. 别人家的CDQ分治更屌..我垃圾咯. 只是存个代码: #include<cstdio> #include<cstdlib> #include<cstring> #include<iostream> #include<…
模板题,折腾了许久. cqd分治整体二分,感觉像是把询问分到答案上. #include <bits/stdc++.h> #define rep(i, a, b) for (int i = a; i <= b; i++) #define drep(i, a, b) for (int i = a; i >= b; i--) #define REP(i, a, b) for (int i = a; i < b; i++) #define pb push_back #define m…
Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次删除的元素.   Output   输出包含m行,依次为删除每个元素之前,逆序对的个数. Sample Input 5 4 1…
3295: [Cqoi2011]动态逆序对 Time Limit: 10 Sec  Memory Limit: 128 MB Description 对于序列A,它的逆序对数定义为满足i<j,且Ai>Aj的数对(i,j)的个数.给1到n的一个排列,按照某种顺序依次删除m个元素,你的任务是在每次删除一个元素之前统计整个序列的逆序对数. Input 输入第一行包含两个整数n和m,即初始元素的个数和删除的元素个数.以下n行每行包含一个1到n之间的正整数,即初始排列.以下m行每行一个正整数,依次为每次…
题意: 给定两棵有根树,各有 N 个点.两棵树上的点分别被从 1 到 N 标号.两棵树的根均为标号为 1 的节点. 你的任务非常简单:对于每个 i,找到一个 j(j != i),使得在两棵树中 j 都是 i 的祖先. 输入数据第一行包含一个整数 T,表示数据组数. 每组数据第一行包含一个整数 N 表示每棵树中节点的个数. 接下来的 N - 1 行,每行包含两个整数 ui 和 vi,表示在第一棵树中有一条边连接 ui 和 vi. 再接下来的 N - 1 行,每行包含两个整数 ui 和 vi,表示在…
注意判断 三个条件都一样的-- (CDQ分治 其实并不是很难理解 只是想不到--) CDQ分治: //By SiriusRen #include <cstdio> #include <algorithm> using namespace std; #define N 888888 int n,k,tree[N],tot,ans[N]; struct Node{int a,b,c,ans,sum;}node[N]; bool cmp(Node a,Node b){if(a.a!=b.…
P5445 [APIO2019]路灯 转化为平面上的坐标(x,y),set维护连续区间. 用树套树维护矩阵加法,单点查询. 注意维护矩阵差分的时候, $(x,y,v)$是对$(x,y)(n+1,n+1)$的矩阵做出贡献 #include<iostream> #include<cstdio> #include<cstring> #include<set> #define ri register int using namespace std; int read…