观察两个数t,k,假设t<k,那么对于所有的区间[l,r],l<=t,r>=k,t都会对t做出一份贡献。即化为求有多少个区间包含了这两个数字,而这个数字是可以直接用排列组合法算出来的,O(1)。然后再统计对于每一个数字的前面有多少个数字是比它小的,然后再进行计算。总的时间复杂度为O(n^2)。但我们发现1000000的数据即使两秒也是过不了的,然后我们可以用树状数组来维护比某一个数小的所有下标总和,最终的时间复杂度是O(nlogn)然后就KO啦。
注册一个 Vijos 通用账户,您就可以在我们提供的所有在线评测服务上提交代码、参与讨论。
使用您的 Vijos 通用账户