\(\text{Problem}\)

给定一个整数序列 \(a[1..N]\),定义 \(sum[i][j]=a[i]+a[i+1]+...+a[j]\),将所有的 \(sum[i][j]\) 从小到大排序(其中 \(i,j\) 满足 \(1<=i<=j<=N\) ),得到一个长为 \(N*(N+1)/2\) 的序列,求该序列中的第 \(K\) 个元素。

\(\text{Solution}\)

非常经典的题

二分答案然后 \(check\)

\(\text{Code}\)

#include <cstdio>
#include <algorithm>
#include <iostream>
#define ls (p << 1)
#define rs (ls | 1)
#define RE register
#define IN inline
using namespace std;
typedef long long LL; const int N = 2e4 + 5;
const LL INF = 1e18;
int n, m, len;
LL a[N], b[N], sum[N * 4]; void build(int p, int l, int r)
{
sum[p] = 0;
if (l == r) return;
int mid = l + r >> 1;
build(ls, l, mid), build(rs, mid + 1, r);
}
void Modify(int p, int l, int r, int x, int v)
{
if (x > r || x < l) return;
if (l == r) return sum[p] += v, void();
int mid = l + r >> 1;
if (x <= mid) Modify(ls, l, mid, x, v);
else Modify(rs, mid + 1, r, x, v);
sum[p] = sum[ls] + sum[rs];
}
LL Query(int p, int l, int r, int x)
{
if (x > r || x < l) return 0;
if (l == r) return sum[p];
int mid = l + r >> 1;
if (x <= mid) return Query(ls, l, mid, x) + sum[rs];
return Query(rs, mid + 1, r, x);
} IN int check(LL mid)
{
int res = 0;
build(1, 1, len), Modify(1, 1, len, lower_bound(b + 1, b + len + 1, 0) - b, 1);
for(RE int i = 1; i <= n; i++)
{
int x = lower_bound(b + 1, b + len + 1, a[i] - mid) - b;
res += Query(1, 1, len, x);
Modify(1, 1, len, lower_bound(b + 1, b + len + 1, a[i]) - b, 1);
}
return res >= m;
} int main()
{
scanf("%d%d", &n, &m);
for(RE int i = 1; i <= n; i++) scanf("%lld", &a[i]), a[i] += a[i - 1], b[i] = a[i];
b[n + 1] = 0, sort(b + 1, b + n + 2), len = unique(b + 1, b + n + 2) - b - 1;
LL l = -INF, r = INF, mid, ans;
while (l <= r)
{
mid = (l + r) >> 1;
if (check(mid)) ans = mid, r = mid - 1;
else l = mid + 1;
}
printf("%lld\n", ans);
}

最新文章

  1. js中 javascript:void(0) 用法详解
  2. Golang gzip的压缩和解压
  3. Linux centOS下搭建RTMP服务器的具体步骤
  4. 编译android源码官方教程(5)编译完之后刷机、编译fastboot
  5. 修改oracle数据库密码
  6. Linux 源码的安装 3个步骤
  7. 关于使用用友华表Cell控件按需打印行的方法
  8. 加速ssh连接
  9. firefox因gnash cpu 高
  10. maven copy 依赖jar包
  11. C# 操作IIS -App &amp; AppPools
  12. PRINCE2有用吗?
  13. JVM调优总结:分代垃圾回收详述
  14. 栈的实现Java
  15. TensorFlow之DNN(一):构建“裸机版”全连接神经网络
  16. express 实践
  17. [SQL]LeetCode184. 部门工资最高的员工 | Department Highest Salary
  18. Docker 部署Gitlab
  19. 使用PhotoShop将视频转为gif格式
  20. dev中文本框等获取焦点事件

热门文章

  1. bug处理记录:Error running &#39;WorkflowApplication&#39;: Command line is too long. Shorten command line for WorkflowApplication or also for Spring Boot default configuration?
  2. Docker进阶-Dockerfile建立一个自定义的镜像执行自定义进程
  3. AcWing341. 洛谷P1073, NOIP2009 最优贸易
  4. 使用python批量更改文件
  5. [深度学习] ncnn编译使用
  6. HBase详解(05) - HBase优化 整合Phoenix 集成Hive
  7. 从最简单的线性DP开始
  8. Asp-Net-Core-管道VS过滤器
  9. 使用 Link Cut Tree 维护最小生成树
  10. FFmpeg 解码内存泄漏汇总,sws_getContext函数无法释放问题