7.29集训
作者:互联网
上午
(睡觉ing)
主要也就是讲了数据结构
讲了树状数组,线段树的相关操作(貌似没有提到分块)
单点修改,区间查询
秒切
区间修改,单点查询
搞个差分数组,还是切
区间修改,区间查询
推式子....埋地雷
逆序对
way1.我们可以用归并排序来求
tot += (LL)mid - i + 1;
way2.用树状数组
当然是建立权值树状数组
我们考虑逆序对的定义,首先是\(i>j\),其次是\(a[i] < a[j]\)
在树状数组里面...... 埋地雷
火柴排队
考虑,我们需要保证的是,a序列的第k大数对应着b序列中第k大的数
所以在离散化完成后的数组内,我们假设\(a = \left\{ 4,3,1,2 \right\}\),\(b = \left\{ 1,3,2,4 \right\}\)
令\(q[a[i]] = b[i]\),相当于以\(a[i]\)为关键字对\(b[i]\)进行排序
若序列a与序列b相等,也就是说\(q[i] = i\)
我们想让\(a,b\)序列相等,就要保证q数组单调递增
所以原来问题转化为:讲原来凌乱的q数组转化为一个升序数组需要的最小次数,切每一次只能交换相邻的两个数
这不是逆序对这是啥?
项链
用\(nlogn\)离线树状数组才能做,莫队会被卡
我们考虑当前这个颜色是否出现过,如果发现没有出现过,那么就令他为1,如果出现过,就令前面出现的那次\(+(-1)\)
一个区间的答案呼之欲出\(\sum (last[i] < l)\) 其中\(l \leq i \leq r\)
异或和
观察数据范围,\(\sum a[i] \leq 1e6\)
考虑前缀和
考虑二进制下每一位对答案的影响,所以分四种情况
设第一个数\(A\),第二个数为\(B\),所以分为\(A=1\)\(B=1\)\(A=1\)\(B=0\)的情况
\(1 - 1 = 1\)
说明第一个数的第\(k\)位为\(1\)的时候,前\(k-1\)位要比\(B\)的前\(k-1\)位小
\(1 - 0 = 1\)
说明第一个数的第\(k\)位为\(1\)的时候,前\(k-1\)位要比\(B\)的前\(k-1\)位大
\(0 - 1 = 0\)
说明第一个数的第\(k\)位为\(0\)的时候,前\(k-1\)位要比\(B\)的前\(k-1\)位小
\(0 - 1 = 1\)
说明第一个数的第\(k\)位为\(0\)的时候,前\(k-1\)位要比\(B\)的前\(k-1\)位大
然后埋坑.....
附近公园
先把这个序列大于等于水面的取为1,否则为0
考虑每一位置对他左边的取一个min和max,考虑min与max序列中,“1”的那些位置有几个不一样
就相当于存在了几对区间,所以
ans = differt >> 1;
然后我们考虑.....又埋坑了.....
关于可持久化线段树
考虑对每一个状态都开一个线段树,为了使其优化,我们尝试当前树连之前树的边
单点修改的话,可以简单一些
对于区间修改的东西,我们得边读入边建树
标签:位要,树状,数组,序列,7.29,考虑,集训,位为 来源: https://www.cnblogs.com/yszhyhm/p/13395418.html