这是一道神题,首先我们不难先到整体二分吧下面的问题就是,求出对于每个水果,有多少盘子是他的子路径直接考虑不是很容易,我们换个思路,考虑对于每个盘子,哪些水果能包含它我们假设盘子a,b,dep[a]0 do 43 begin 44 y:=e[i].po; 45 if a...
分类:
其他好文 时间:
2015-05-09 18:42:20
阅读次数:
217
时间分治(又叫cdq分治),是解决一类“贡献独立”、“支持离线”的数据结构问题的算法。假设有一个操作序列:ABAABAABBAAAB,其中每个A对其后面的B有一定贡献,要求输出每个B对应的答案。“贡献独立”是指:每个A对其后面的B的影响是不受其他A影响的,即是要我们用B前面的所有A更新过B,那么B的...
分类:
其他好文 时间:
2015-04-29 13:11:18
阅读次数:
134
整体二分。首先,第k大问题是满足二分性的(只要我们能够快速求出集合中比某个数小的数的个数,那么就可以快速找出该集合的第K大)。然后考虑整体二分,关键是我们怎么将询问分到其对应的答案子区间中。和普通的区间第K大的做法一样,我们先将修改按照大小排序(普通的区间第K大就是给出的原序列,而这里就是区间修改)...
分类:
其他好文 时间:
2015-04-28 22:45:38
阅读次数:
243
可以用二维树状数组套值域线段树来做,复杂度:O( (n*n+q) * logn logn log10^9 )但作为作为整体二分的例题,还是用整体二分来写了一下。对整体二分有一点感觉了。整体二分,顾名思义,二分答案,只不过不是对单独一个询问,而是对所有询问,具体过程可以想象成对询问的不断分类(根据其答...
分类:
其他好文 时间:
2015-04-28 18:19:27
阅读次数:
206
[问题描述]
给定一个长度为N的已知序列Ai,要求维护这个序列,能够支持以下两种操作:
1、查询A[i],A[i+1],A[i+2],…,Aj中,升序排列后排名第k的数。
2、修改A[i]的值为j。所谓排名第k,指一些数按照升序排列后,第k位的数。例如序列{6,1,9,6,6},排名第3的数是6,排名第5的数是9。[输入格式]
第一行包含一个整数D(0<=D<=4),表示测试数据的数目。接下...
分类:
其他好文 时间:
2015-04-09 09:01:30
阅读次数:
127
题目描述看到很短的题目会让人心情愉悦,所以给出一个长度为N的序列A1,A2,A3,…,AN,现在有M个询问,每个询问都是Ai…Aj中第k小的数等于多少。输入格式第一行两个正整数N,M。
第二行N个数,表示序列A1,A2,…,AN。
紧着的M行,每行三个正整数i,j,k(k≤j-i+1),表示询问Ai…Aj中第k小的数等于多少。输出格式共输出M行,第i行输出第i个询问的答案。样例输入1:
4 3...
分类:
其他好文 时间:
2015-04-07 10:03:43
阅读次数:
166
上午的学习学会了整体二分,下午学了cdq分治
发现了二者的区别:
整体二分的主体是在不断地二分答案(把所有询问二分),而cdq分治则是在不断地二分操作。
当然同样的,cdq分治的复杂度也是与区间长度正相关.
我们定义函数Solve(l,r)可以得到操作l,r的结果
cdq分治的实现过程:主要过程:Step1.将所有操作按照某个关键字排序.(不一定是读入顺序.)
Step2.二分操作.对于...
分类:
其他好文 时间:
2015-03-29 18:05:42
阅读次数:
126
Description有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c
如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。
Input第一行N,M
接下来M行,每行形如1 a b c或2 a b c
Output输出每个询问的结果
Sample Input
2 5
1 1 2 1
1 1...
分类:
其他好文 时间:
2015-03-29 15:08:07
阅读次数:
412