Find the answer

题目传送门

解题思路

要想变0的个数最少,显然是优先把大的变成0。所以离散化,建立一颗权值线段树,维护区间和与区间元素数量,假设至少减去k才能满足条件,查询大于等于k的最少数量即可。

代码如下

#include <bits/stdc++.h>
#define INF 0x3f3f3f3f
using namespace std;
typedef long long ll; inline int read(){
int res = 0, w = 0; char ch = 0;
while(!isdigit(ch)){
w |= ch == '-', ch = getchar();
}
while(isdigit(ch)){
res = (res << 3) + (res << 1) + (ch ^ 48);
ch = getchar();
}
return w ? -res : res;
} const int N = 200005; struct T{
int l, r;
int c;
ll sum;
}tree[N<<2];
ll a[N], b[N];
void build(int k, int l, int r)
{
tree[k].l = l, tree[k].r = r;
tree[k].c = tree[k].sum = 0;
if(tree[k].l == tree[k].r)
return;
int mid = (tree[k].l + tree[k].r) / 2;
build(2*k, l, mid);
build(2*k+1, mid + 1, r);
} void insert(int k, int x)
{
if(tree[k].l == tree[k].r){
tree[k].c ++;
tree[k].sum += b[x];
return;
}
int mid = (tree[k].l + tree[k].r) / 2;
if(x <= mid)
insert(2*k, x);
else
insert(2*k+1, x);
tree[k].c = tree[2*k].c + tree[2*k+1].c;
tree[k].sum = tree[2*k].sum + tree[2*k+1].sum;
} ll query(int k, ll x)
{
if(tree[k].l == tree[k].r)
return (x - 1) / b[tree[k].l] + 1;
if(tree[2*k+1].sum > x)
return query(2*k+1, x);
else if(tree[2*k+1].sum < x){
x -= tree[2*k+1].sum;
return query(2*k, x) + tree[2*k+1].c;
}
else
return tree[2*k+1].c;
} int main()
{
int q;
scanf("%d", &q);
while(q --){
int n;
ll m;
scanf("%d%lld", &n, &m);
for(int i = 1; i <= n; i ++){
scanf("%lld", &a[i]);
b[i] = a[i];
}
sort(b + 1, b + n + 1);
int k = unique(b + 1, b + n + 1) - b - 1;
build(1, 1, k);
ll sum = 0;
for(int i = 1; i <= n; i ++){
sum += a[i];
if(sum - m > 0)
printf("%lld ", query(1, sum - m));
else
printf("0 ");
int x = lower_bound(b + 1, b + k + 1, a[i]) - b;
insert(1, x);
}
printf("\n");
}
return 0;
}

最新文章

  1. 项目管理详细任务(PMBOK2008)
  2. 使用Sqoop从MySQL导入数据到Hive和HBase 及近期感悟
  3. ubuntu 下安装 cx_Oracle库
  4. jquery插件之表格隔行变色并鼠标滑过高亮显示
  5. bzoj1977 [BeiJing2010组队]次小生成树 Tree
  6. C#定时执行一个操作
  7. Bolts-Android
  8. [原创]java WEB学习笔记44:Filter 简介,模型,创建,工作原理,相关API,过滤器的部署及映射的方式,Demo
  9. android 基于百度地图api开发定位以及获取详细地址
  10. easyui源码翻译1.32--ComboGrid(数据表格下拉框)
  11. poj3764(dfs+Trie树+贪心)
  12. Ipsec transport mode and turnnel mode
  13. .Net程序员学用Oracle系列(1):导航目录
  14. linux的学习系列 5--环境变量
  15. sql server 去除字符中空格的方法
  16. Python Web(Django)与SQL SERVER的连接处理
  17. vijos 1605 双栈排序 - 贪心 - 二分图
  18. Fragment与Radiogroup联动,经典的主界面布局。使用show和hide的方式实现;
  19. Android中Handler引起的内存泄露
  20. 网站优化(SEO)的10大误区

热门文章

  1. getstu
  2. python format函数的使用
  3. django的model继承abstract,proxy,managed
  4. Windows10系统下,如何彻底删除卸载MySQL
  5. POJ 2001 Shortest Prefixes (Trie)
  6. Linux折腾
  7. SpringBoot传递单一参数时@RequestParam和@RequestBody的区
  8. Joda-Time 入门
  9. miaosha
  10. 换了SSD发现plank也好了