题目传送门//res tp hdu

目的

在尾部逐步插入n个元素,求插入第i个元素时,[1,i)内删去多少个元素,可使前缀和[1,i]不大于m

多测Q [1,15]

n [1,2e5]

m [1,1e9]

每个元素Wi [1,m] (i∈[1,n]);

数据结构

树状数组

分析

维护两个树状数组,分别储存前缀和前缀中元素数量。先将元素全部读入,之后进行排列,同时记录好每个元素排列之后的下标。按下标向树状数组插入元素。之后二分枚举即可

时间复杂度O(Qnlognlogn)

#include<iostream>
#include<algorithm>
#include<cmath>
using namespace std;
typedef long long ll;
const int L = 200010;
ll val[L],sor[L];
struct E{
ll v;
int pos;
}sorted[L];
int Q,POS[L];
ll n,m;
ll BIT[L],bit[L];
int Len;
int lowbit(int x){return x&-x;}
bool cmp(E a,E b){return a.v<b.v;}
void change(int x,int y){
sor[x] = y;
for(int i = x;i<=L;i+=lowbit(i)){
BIT[i] += y;bit[i]++;
}
}
ll query(int k){//对前缀和的询问
ll ans = 0;
for(int i = k;i > 0; i -= lowbit(i))
ans += BIT[i];
return ans;
}
int query1(int k){//对前缀内元素个数的询问
int ans = 0;
for(int i = k;i>0;i-=lowbit(i))
ans += bit[i];
return ans;
}
int getans(int x,int M){ //前x个元素的小序前缀之和不超过M
int lo = 1,hi = n+1;
int mi;
ll sum;
while(lo < hi){
mi = (lo + hi)>>1;
sum = query(mi);
if(M <sum) hi = mi;
else lo = mi + 1;
}
--lo;
return x-query1(lo);
} int main(){
scanf(" %d",&Q);
while(Q--){
scanf(" %lld %lld",&n,&m);
for(int i = 1;i<=n;++i) BIT[i] = bit[i] = 0;
for(int i = 1;i<=n;++i) sor[i] = 0;
for(int i = 1;i<=n;++i) {
scanf(" %lld",&val[i]);
sorted[i].v = val[i];
sorted[i].pos = i;
}
sort(sorted+1,sorted+1+n,cmp);
for(int i = 1;i<=n;++i) POS[sorted[i].pos] = i;
int ans;
for(int i = 1;i<=n;++i){
ans = getans(i-1,m-val[i]);
change(POS[i],val[i]);
printf("%d ",ans);
}
printf("\n");
}
}

hdu 6609 区间条件前缀和 + 二分的更多相关文章

  1. HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化

    HDU 2829 区间DP & 前缀和优化 & 四边形不等式优化 n个节点n-1条线性边,炸掉M条边也就是分为m+1个区间 问你各个区间的总策略值最少的炸法 就题目本身而言,中规中矩的 ...

  2. hdu 4471 区间条件统计 区间 不超过 x 的元素的个数

    题目传送门//res tp hdu 目的 对长度为n的区间,m次询问,每次提供一个区间两端点与一个值x,求区间内不超过x的元素个数 n 1e5 m 1e5 ai [1,1e9] (i∈[1,n]) 多 ...

  3. Acwing:102. 最佳牛围栏(前缀和 + 二分)

    农夫约翰的农场由 NN 块田地组成,每块地里都有一定数量的牛,其数量不会少于1头,也不会超过2000头. 约翰希望用围栏将一部分连续的田地围起来,并使得围起来的区域内每块地包含的牛的数量的平均值达到最 ...

  4. hdu 5869 区间不同GCD个数(树状数组)

    Different GCD Subarray Query Time Limit: 6000/3000 MS (Java/Others)    Memory Limit: 65536/65536 K ( ...

  5. hdu 5700区间交(线段树)

    区间交 Time Limit: 8000/4000 MS (Java/Others)    Memory Limit: 65536/65536 K (Java/Others)Total Submiss ...

  6. hdu 4283 区间dp

    You Are the One Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...

  7. GXU - 7D - 区间求和 - 前缀和

    https://oj.gxu.edu.cn/contest/7/problem/D 描述 有一个所有元素皆为0的数组A,有两种操作: 1 l r x表示将A区间[l,r]内所有数加上x: 2 l r表 ...

  8. Glider(前缀和+二分)

    题目链接:Glider Gym-101911B 解题分析:下落的高度一定,是h.在没有气流的地方每秒下落1:所以可以转化为经过无气流地带的时间总长为h. 那么很显然从一个有气流地带的开始,选择下落,那 ...

  9. Codeforces 975 前缀和二分算存活人数 思维离直线速度相同判平行

    A /* Huyyt */ #include <bits/stdc++.h> using namespace std; typedef long long ll; ]; ]; map< ...

随机推荐

  1. win10下Python安装pycrypto报错

    错误一:  error: Microsoft Visual C++ 14.0 is required. 解决办法: 下载Visual C++2017安装包,下载链接:Visual C++ 2017 安 ...

  2. Oracle审计表AUD$处理方法

    Oracle版本:11.2.0,其他版本要测试DBMS_AUDIT_MGMT能否成功 1. 查询表,然后truncate select count(*) from aud$; truncate tab ...

  3. flask 设置访问地址 和 访问端口

    app.run() 四个参数 host:主机,可设置为本地或其他IP port:端口,是run()启动服务的时候指定的运行端口, debug:调试,如果需要进入调试模式,可以将这个选项设置成True ...

  4. [设计原则与模式] 面向对象程序设计之五大原则(SOLID)

    cp from:  https://blog.csdn.net/zhangbuzhangbu/article/details/51719952 S.O.L.I.D是面向对象设计和编程(OOD& ...

  5. Apollo简介及项目集成

    1. 产生背景 随着程序功能的日益复杂,程序的配置日益增多:各种功能的开关.参数的配置.服务器的地址…… 对程序配置的期望值也越来越高:配置修改后实时生效,灰度发布,分环境.分集群管理配置,完善的权限 ...

  6. Python Django使用HttpResponse返回图片并显示

    views.py def read_img(request): """ : 读取图片 :param request: :return: """ ...

  7. Java 理论与实践-非阻塞算法简介

    在不只一个线程访问一个互斥的变量时,所有线程都必须使用同步,否则就可能会发生一些非常糟糕的事情.Java 语言中主要的同步手段就是 synchronized 关键字(也称为内在锁),它强制实行互斥,确 ...

  8. ffmpeg-php扩展

    php视频缩略图,较常用的是ffmpeg-php 1: 安装 ffmpeg ffmpeg的下载链接  http://ffmpeg.org/download.html 解压安装包 tar -jxvf f ...

  9. [整理]Python程序员面试前需要看的博客(持续整理)

    基本素养 如何聪明的提问 面试方法 从面试官角度来告诉大家,哪些人能面试成功 如何在面试中介绍自己的项目经验 计算机系统 [面试] 迄今为止把同步/异步/阻塞/非阻塞/BIO/NIO/AIO讲的这么清 ...

  10. android webview带cookie访问url

    问题描述在原生和h5混合开发的时候会遇到这么一个问题,用webview加载某个url时,你只是app登录了账号,但是网页却没有,所有会禁止访问此url,webview就会显示白屏.所以要访问此url, ...