/*
* 327. Count of Range Sum
* 2016-7-8 by Mingyang
*/
public int countRangeSum(int[] nums, int lower, int upper) {
int n = nums.length;
long[] sums = new long[n + 1];
for (int i = 0; i < n; ++i)
sums[i + 1] = sums[i] + nums[i];
return countWhileMergeSort(sums, 0, n + 1, lower, upper);
}
private int countWhileMergeSort(long[] sums, int start, int end, int lower, int upper) {
if (end - start <= 1) return 0;
int mid = (start + end) / 2;
int count = countWhileMergeSort(sums, start, mid, lower, upper)
+ countWhileMergeSort(sums, mid, end, lower, upper);
int j = mid, k = mid, t = mid;
long[] cache = new long[end - start];
for (int i = start, r = 0; i < mid; ++i, ++r) {
while (k < end && sums[k] - sums[i] < lower) k++;
while (j < end && sums[j] - sums[i] <= upper) j++;
while (t < end && sums[t] < sums[i]) cache[r++] = sums[t++];
cache[r] = sums[i];
count += j - k;
}
System.arraycopy(cache, 0, sums, start, t - start);
return count;
}

最新文章

  1. PLSQL win7 64位
  2. (转)Do not use &quot;using&quot; for WCF Clients - 不要将WCF Client 放在 ‘Using’ 代码块中
  3. Debian下安装vim
  4. 【Oracle】使用Oracle的v$sql视图查看近段时间执行的SQL语句
  5. Windows KB2984972安装后堵住了一个windows 7 桌面可以多个用户远程访问桌面的漏洞。
  6. 如何从MySQL官方Yum仓库安装MySQL5.6
  7. jQuery对象与DOM对象
  8. Linux 与 CONE NAT 和 Symmetric NAT
  9. JAVAEE filter总结
  10. Ext JS学习第三天 我们所熟悉的javascript(二)
  11. 创Wcf案例数据服务
  12. 使用Github生成燃尽图
  13. TNS-12541: TNS: 无监听程序 解决方案
  14. Vue中观察者模式的实现
  15. 总结:JDK1.5-JDK1.8各个新特性
  16. SpringMVC注解式开发之接收请求参数
  17. EUREKA原理总结
  18. redis性能测试工具的使用
  19. The &quot;tsconfig.json&quot; file must have compilerOptions.sourceMap set to true
  20. hdu1003 最大子串和

热门文章

  1. 数学基础:HUD1406-完数
  2. html--元素显示优先级
  3. Linux中 find 常见用法示例
  4. 第1章jquery选择器
  5. BBS-登录
  6. Spring 依赖注入(二、注入参数)
  7. hibernate框架的搭建与简单实现增删改
  8. 【bzoj1965】 [Ahoi2005]SHUFFLE 洗牌 欧拉定理
  9. 【Luogu】P2146软件包管理器(树链剖分)
  10. 【Luogu】P3159交换棋子(超出我能力范围的费用流)