codeforce 1185C2

Exam in BerSU (hard version)
这道题是属于codeforce上的一道题,说明不会用到一些特别难写的数据结构,这道题是要你维护一个关于整数的多重集合,然后给你一个背包容量,查询用这个背包最多可以装多少个该集合里的数,显然,每次取走集合中最小的那个数,我们的背包才能装的更多。所以该集合要维护成有序集。
我们对该有序集要实行两个功能:1.插入新元素。2.查询前n小的数之和。
这道题用splay的话复杂度是插入+查询前n小的数=logn,但是splay太难写了,想了想,用树状数组加二分就可以实现这个功能,复杂度logn^2,但是代码要简洁的多!

#include<cstring>
#include<stdio.h>
#include<cmath>
#include<map>
#include<vector>
#include<set>
#include<sstream>
#include<queue>
#include<algorithm>
#include<stack>
#include<cstdlib>
#include<deque> 
#include<bitset>
#include<iostream>
#define FIN freopen("D://debug//in.txt","r",stdin);
#define FOUT freopen("D://debug//out.txt","w",stdout);
#define FDATA freopen("D://debug//data.txt","w",stdout);
using namespace std;
typedef long long int ll;
const int maxn=2e5+5;
int n,m;
int a[maxn],b[maxn];
int a2[maxn];ll b2[maxn];
void add1(int d,int v){
	while(d<=m){
		a2[d]+=v;d+=d&-d;
	}
} 
void add2(int d,int v){
	while(d<=m){
		b2[d]+=v;d+=d&-d;
	}
}
int sum1(int d){
	int ans=0;
	while(d){
		ans+=a2[d];d-=d&-d;
	}
	return ans;
}
ll sum2(int d){
	ll ans=0;
	while(d){
		ans+=b2[d];d-=d&-d;
	}
	return ans;
}
int h(int M){
	int low=1,hign=m;
	while(low<=hign){
		int mid=(low+hign)/2;
		if(sum2(mid)>=M)hign=mid-1;
		else low=mid+1;
	}
	int k=b[low-1],cnt=sum1(low);
	ll ans=sum2(low);
	return (ans-M)%k==0?cnt-(ans-M)/k:cnt-(ans-M)/k-1;
}
int f(int x){
	return (lower_bound(b,b+m,x)-b)+1;
}
int main(){
	//FIN
	int v;
	cin>>n>>v;m=0;
	for(int i=1;i<=n;i++)cin>>a[i],b[m++]=a[i];
	sort(b,b+m);
	m=unique(b,b+m)-b;
	ll sum=0;
	for(int i=1;i<=n;i++){
		sum+=a[i];
		if(sum<=v){
			printf("0%c",i==n?'\n':' ');
		}
		else printf("%d%c",i-1-h(v-a[i]),i==n?'\n':' ');
		int pos=f(a[i]);
		add1(pos,1);
		add2(pos,a[i]);
	}
}

我想的测试数据:
7 100
1 1 1 99 1 99 96

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
本项目是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。该系统主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的Java学习者,包含项目源码、数据库脚本、项目说明等,有论文参考,可以直接作为毕设使用。 后台框架采用SpringBoot,数据库使用MySQL,开发环境为JDK、IDEA、Tomcat。项目经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。 该系统的功能主要包括商品管理、订单管理、用户管理等模块。在商品管理模块中,可以添加、修改、删除商品信息;在订单管理模块中,可以查看订单详情、处理订单状态;在用户管理模块中,可以注册、登录、修改个人信息等。此外,系统还提供了数据统计功能,可以对销售数据进行统计和分析。 技术实现方面,前端采用Vue框架进行开发,后端使用SpringBoot框架搭建服务端应用。数据库采用MySQL进行数据存储和管理。整个系统通过前后端分离的方式实现,提高了系统的可维护性和可扩展性。同时,系统还采用了一些流行的技术和工具,如MyBatis、JPA等进行数据访问和操作,以及Maven进行项目管理和构建。 总之,本系统是一个基于SpringBoot开发的华府便利店信息管理系统,使用了Vue和MySQL作为前端框架和数据库。系统经过严格调试,确保可以运行。如果基础还行,可以在代码基础之上进行改动以实现更多功能。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值