UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#197335#2854. 装箱问题 boxwosile1001633ms60200kbC++11869b2023-11-11 11:37:372023-11-11 12:12:18

answer

#include<bits/stdc++.h>
using namespace std;
int n,m;
multiset<int>s;
int a[1000005],mx[4000005]; 
int ans2=0;
void build(int l,int r,int x){
	mx[x]=m;
	if(l==r)return;
	int mid=(l+r)/2;
	build(l,mid,x<<1);
	build(mid+1,r,x<<1|1);
}
void put(int l,int r,int x,int val){
	if(l==r){
		mx[x]-=val;
		ans2=max(ans2,l);
		return;
	}
	int mid=(l+r)/2;
	if(mx[x<<1]>=val)put(l,mid,x<<1,val);
	else put(mid+1,r,x<<1|1,val);
	mx[x]=max(mx[x<<1],mx[x<<1|1]);
}
int main(){
	scanf("%d%d",&n,&m);
	for(int i=1;i<=n;i++)scanf("%d",&a[i]);
	for(int i=1;i<=n;i++)s.insert(m);
	int ans1=0;
	for(int i=1;i<=n;i++){
		auto it=s.lower_bound(a[i]);
		int x=(*it)-a[i];
		s.erase(it);
		if((*it)==m)ans1++;
		s.insert(x);
	} 
	build(1,n,1);
	for(int i=1;i<=n;i++)put(1,n,1,a[i]);
	printf("%d %d",ans1,ans2);
	return 0;
	//quod erat demonstrandum
}

详细

小提示:点击横条可展开更详细的信息

Test #1:

score: 20
Accepted
time: 0ms
memory: 1296kb

input:

1000 1000000000
5132991 971854484 937970094 913030415 51397098 98152103 78159240 972139111 994249203...

output:

517 519

result:

ok single line: '517 519'

Test #2:

score: 20
Accepted
time: 1ms
memory: 1292kb

input:

1000 1000000
32768 4096 65536 4 1 32 32768 524288 4 4096 4096 512 262144 16 524288 4 64 16 32768 163...

output:

46 46

result:

ok single line: '46 46'

Test #3:

score: 20
Accepted
time: 28ms
memory: 4284kb

input:

50000 1000000000
32768 4096 67108864 4096 1024 32768 32 524288 4194304 4096 4096 524288 262144 16384...

output:

1813 1813

result:

ok single line: '1813 1813'

Test #4:

score: 20
Accepted
time: 125ms
memory: 7336kb

input:

100000 1000000000
5132991 971854484 937970094 913030415 51397098 98152103 78159240 972139111 9942492...

output:

50119 50195

result:

ok single line: '50119 50195'

Test #5:

score: 20
Accepted
time: 1479ms
memory: 60200kb

input:

1000000 1000000000
5132991 971854484 937970094 913030415 51397098 98152103 78159240 972139111 994249...

output:

500379 500828

result:

ok single line: '500379 500828'

Extra Test:

score: 0
Extra Test Passed