题目链接:HDU - 6609


用权值线段树维护区间总和和总个数。

然后在权值线段树上面二分即可。因为区间比较大,所以动态开点。但是要注意到,我们二分的是严格闭区间,所以还要考虑当前点能不能继续减少。


AC代码:

#pragma comment(linker, "/STACK:102400000,102400000")
#pragma GCC optimize("-Ofast","-funroll-all-loops")
#include<bits/stdc++.h>
//#define int long long
#define mid (l+r>>1)
using namespace std;
typedef long long LL;
const int N=2e5+10,M=N*80;
int n,m,res[N],rt,lc[M],rc[M],num[M],cnt;
LL sum[M],s;
void change(int &p,int l,int r,int x){if(!p)    p=++cnt,lc[p]=rc[p]=sum[p]=num[p]=0;if(l==r)   return sum[p]+=l,num[p]++,void();if(x<=mid) change(lc[p],l,mid,x);else change(rc[p],mid+1,r,x);sum[p]=sum[lc[p]]+sum[rc[p]];num[p]=num[lc[p]]+num[rc[p]];
}
int ask(int p,int l,int r,LL val){if(l==r)    return l;if(sum[rc[p]]>=val)    return ask(rc[p],mid+1,r,val);else return ask(lc[p],l,mid,val-sum[rc[p]]);
}
LL asksum(int p,int l,int r,int ql,int qr){if(!p)   return 0;if(l==ql&&r==qr)   return sum[p];if(qr<=mid)   return asksum(lc[p],l,mid,ql,qr);else if(ql>mid) return asksum(rc[p],mid+1,r,ql,qr);else return asksum(lc[p],l,mid,ql,mid)+asksum(rc[p],mid+1,r,mid+1,qr);
}
int asknum(int p,int l,int r,int ql,int qr){if(!p)  return 0;if(l==ql&&r==qr)   return num[p];if(qr<=mid)   return asknum(lc[p],l,mid,ql,qr);else if(ql>mid) return asknum(rc[p],mid+1,r,ql,qr);else return asknum(lc[p],l,mid,ql,mid)+asknum(rc[p],mid+1,r,mid+1,qr);
}
void solve(){cin>>n>>m; s=cnt=rt=0;for(int i=1,x,pos,del;i<=n;i++){scanf("%d",&x);   s+=x;    LL tot=0;if(s<=m){res[i]=0;   change(rt,1,m,x);   continue;}pos=ask(rt,1,m,s-m),del=asknum(rt,1,m,pos,m);tot=asksum(rt,1,m,pos,m);res[i]=del-(tot-s+m)/pos;change(rt,1,m,x);}for(int i=1;i<=n;i++)    printf("%d ",res[i]);puts("");
}
signed main(){int T;    cin>>T;while(T--) solve();return 0;
}

HDU - 6609相关推荐

  1. hdu 6609

    贪心肯定都能想到,删前几大的数,使i满足. 但暴力或者直接求前第k大肯定T: 所以我们只需要求删前K大个数(尽量少删)使得满足题意. 就能转化为权值线段树的经典做法..比赛时多想了个二分  一直T.. ...

  2. 集训队每周一赛 2020-04-02(思维/模拟+贪心+二分)

    第六次周赛 A 金龙小学的口语考试 CodeForces 1185C1 题解 B 黄牌警告 CodeForces 1215A 题解 C 分糖果 CodeForces 678C 题解 D 密文 Code ...

  3. HDU 4389 - X mod f(x)

    题目地址: http://acm.hdu.edu.cn/showproblem.php?pid=4389 2012多校,第9场,1010 . 问题是,询问区间内 存在多少个 哈沙德数(Harshad ...

  4. hdu 多校赛 第三场

    slove  2/11 rank  288 补题   5/11 --------------------------------------------------- 6604 Blow up the ...

  5. hdu 4389 囧,打表

    http://acm.hdu.edu.cn/showproblem.php?pid=4389 题意 :一个数能被他各个位数之和整除则符合要求,给L,R,问区间里有多少个数符合要求. 囧,居然打表就能过 ...

  6. HDU——1106排序(istringstream的使用、STLvector练习)

    排序 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submiss ...

  7. hdu 5438 Ponds 拓扑排序

    Ponds Time Limit: 1 Sec Memory Limit: 256 MB 题目连接 http://acm.hdu.edu.cn/contests/contest_showproblem ...

  8. HDU 1248 寒冰王座(全然背包:入门题)

    HDU 1248 寒冰王座(全然背包:入门题) http://acm.hdu.edu.cn/showproblem.php?pid=1248 题意: 不死族的巫妖王发工资拉,死亡骑士拿到一张N元的钞票 ...

  9. hdu 1312 Red and Black 解题报告

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1312 第二条深搜,题目并不难,但是做了我好久好久,由于一个细节,让我赌上了一个晚上的时间. 题目大意: ...

最新文章

  1. 介绍三种绘制时间线图的方法
  2. 用完U盘忘记安全退出了,会造成数据丢失吗
  3. BigDecimal divide方法结果为无限小数问题
  4. Linux7改运行级别,Centos7 修改运行级别
  5. python -lambda表达式的用法
  6. C#线程同步(1)- 临界区&Lock .
  7. 基于微信我们可以做什么样的应用?
  8. 腾讯推出基于区块链存证的“点亮莫高窟”活动
  9. 华为副总裁回应应用删除用户图片;美国拟允许华为参与 5G 标准建设;Firefox 76.0 发布​ | 极客头条...
  10. Robot Framework(4)——Selenium2Library关键字
  11. BW作为源系统连接时,激活DSO或其他模型时提示8*数据源不存在,无法激活
  12. java 汉字 char_char 类型如何存储一个汉字的?
  13. java 判断session失效_session过期时间设置和判断session是否过期
  14. 测试图片真假软件,如何找出照片的PS痕迹__如何检测一张图片是否被PS过_飞翔教程...
  15. 【2022年】浙江省专升本数学全面总结-(空间解析几何与向量代数)
  16. 删除ubuntu双系统后,开机出现grub黑屏,删除双系统引导项解决
  17. 【高等数学笔记】拉格朗日乘数法(Lagrange Multiplier Method):其实也没那么难嘛
  18. java将ppt转换成图片,图片以幻灯片的备注命名
  19. 百家讲坛全集免费下载
  20. 使用USB充电的5号电池

热门文章

  1. mri计算机系统,MRI的一些基本介绍
  2. MATLAB对水下目标去噪声代码,水下目标噪声与背景噪声的建模与仿真
  3. iPhone 13发布前迎来坏消息,摩托车会损坏手机相机?
  4. 问题解决:系统上禁止运行脚本。有关详细信息,请参阅 https:/go.microsoft.com/fwlink/?LinkID=135170 中的about_Execution_Policies
  5. 用于单图像超分辨率的增强深度残差网络
  6. 浏览器页签icon图标的设置和获取
  7. Dynamic 365 子网格编辑控制列可编辑
  8. zabbix下载方式
  9. SumToken钱包怎么样_SUMTOKEN钱包靠谱吗
  10. 招聘海报制作可以用什么软件,有什么免费模板?