每日一题:区间和的个数
题目
给定一个整数数组 aa,返回区间和在 [lower,upper][lower,upper] 之间的个数,包含 lowerlower 和 upperupper。
区间和 S(i,j)S(i,j) 表示在 aa 中,位置从 ii 到 jj 的元素之和,包含 ii 和 jj (i≤j)(i≤j)。
给定一个整数数组 aa,返回区间和在 [lower,upper][lower,upper] 之间的个数,包含 lowerlower 和 upperupper。
区间和 S(i,j)S(i,j) 表示在 aa 中,位置从 ii 到 jj 的元素之和,包含 ii 和 jj (i≤j)(i≤j)。
nn 支队伍一共参加了三场比赛。
一支队伍 xx 认为自己比另一支队伍 yy 强当且仅当 xx 在至少一场比赛中比 yy 的排名高。
求有多少组 (x,y)(x,y),使得 xx 自己觉得比 yy 强,yy 自己也觉得比 xx 强,(x,y)(x,y), (y,x)(y,x)算一组。
给定长度为 nn 的数组,qq 次询问 [1,l]+[r,n][1,l]+[r,n] 组成的新数组中不相同的元素个数。(1<=n,q<=1e5)(1<=n,q<=1e5)
一眼莫队题,主要是要想怎么样把它变成一个连续的区间。其实只要把整个数组再复制一遍接上就可以了,则原来查询的 rr 变为 ll,ll 变为 l+nl+n,区间连续。
给定一个长度为 (1<=n<=1e5)(1<=n<=1e5) 的数组,(1<=q<=1e5)(1<=q<=1e5) 次询问查询区间 [l,r][l,r] 内 <=k<=k 的元素个数。
考虑树状数组。我们在查询区间 <=k<=k 的个数时,为了更好计数,这个区间应该不包含 >k>k 的元素才行。因此我们不妨离线,将询问的 kk 从小到大排序,将数组也从小到大排序,这样从小到大处理询问,每次处理时只将 <=k<=k 的数挂到树的对应下标上(因为询问的 kk 是从小到大的,因此之前树上的数一定比当前询问的 kk 要小),维护答案为 query(r)−query(l−1)query(r)−query(l−1)。
Update your browser to view this website correctly.&npsb;Update my browser now