ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#197335 | #2854. 装箱问题 box | wosile | 100 | 1633ms | 60200kb | C++11 | 869b | 2023-11-11 11:37:37 | 2023-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