HDU5737 : Differencia】的更多相关文章

注意到$b$不变,考虑用归并树来维护这个$b$序列,对于每个节点有序地维护$b$,同时在归并的时候预处理出每个元素在左右儿子里的排名. 在归并树上额外维护区间内$a\geq b$的个数以及赋值标记. 那么在区间赋值的时候,只需要在根节点的$b$数组中做一个二分,然后往下通过预处理的名次数组转移即可,标记下放时也是如此,每次转移复杂度显然是$O(1)$. 时间复杂度$O((n+m)\log n)$. #include<cstdio> #include<algorithm> const…
Differencia Time Limit: 10000/10000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submission(s): 601    Accepted Submission(s): 173 Problem Description Professor Zhang has two sequences a1,a2,...,an and b1,b2,...,bn. He wants to…
题意:给2组数据a和b数组,每次有2种操作:(+,l,r,x)把a数组第l个到第r个元素全置为x,(?,l,r)查询[l,r]之间哪些位置满足a[i]>=b[i](i>=l && i<=r)并把这些位置的数量统计 一直想很久,没想到什么有效的方案,直到看到题解才明白过来,原来线段树套平衡树还有这种情况:里面其实不是平衡树,只是有序表. 然后这题就转换为区间查找数对应排名 由于此题不用对2个数组都修改,其中1个b树可作为固定的线段树套有序表以节省时间,另外1个表a树则单纯使…
[题目链接] http://acm.hdu.edu.cn/showproblem.php?pid=5737 [题目大意] 给出两个序列a和b,要求实现两个操作: 1. 将a序列的一个区间中的所有数改成同一个数 2. 查询一个区间内a数组中大于相同下标b数组中的数的数. [题解] 考虑到b数组是不变的,可以在归并树上预处理出b数组中每个元素在树的左右儿子中的排名,在归并树建立时,可以求出每个区间ai>bi的个数,在发生区间修改的时候,在根节点的有序的b数组中二分查找修改值的排名,将信息下传就可以统…
归并树,与我们原学过的归并排序是一样的原理,但是在那个的基础上进行扩展应用.首先每个节点储存了它每个节点所代表的点的有序序列,还有就是每个点里面包含的所有的b[i]在左右子树的排名辅助更新数据,还有一个用来记录当前节点a[] >b[] 的数量的num.这时候查询的话就是线段树查询了,然后更新,首先求出要更新进去的点在原本数组的排名,然后就可以将该数据更新进去范围里面的lazy数组了,那么这时候lazy数组怎么使用?其实你这个lazy数组就是你更新进来的数据在确定范围内的一个排名,那么你这个排名就…
首先思考一个朴素的做法 将b[]维护成一个线段树套有序表,每次修改a[]用线段树+lazy tag 并在线段树的子区间上在有序表中二分更新这段区间中a[i]>=b[i]的值,复杂度O(nlog^2) 有没有更优的做法? 考虑在一次修改操作中,查询的数是相同的,并且b[]这个有序表始终不变 因此在生成b[]的线段树套有序表过程中(其实就是归并排序的记录) 我们维护每个数在左右子区间中名次. 这样修改的时候我们只要对b[]排好序的整体做一次二分,找到b[m]<=x<b[m+1] 把修改成x当…
8/13 2016 Multi-University Training Contest 2官方题解 数学 A Acperience(CYD)题意: 给定一个向量,求他减去一个  α(>=0)乘以一个值为任意+1或-1的B向量后得到向量,求这个向量膜的最小值思路: 展开式子,当时最小,结果为. 代码: #include <bits/stdc++.h> using namespace std; long long w,a,b,c,a2; long long gcd(long long x,l…
Acperience 展开式子, \(\left\| W-\alpha B \right\|^2=\displaystyle\alpha^2\sum_{i=1}^{n}b_i^2-2\alpha\sum_{i=1}^n{w_ib_i}+\sum_{i=1}^{n}w_i^2\). 由于\(b_i\in \{+1,-1\}\), 那么\(\displaystyle\sum_{i=1}^{n}b_i^2=n\), 显然\(c=\displaystyle\sum_{i=1}^{n}w_i^2\)也是常…