社区讨论
求助30分
P11894「LAOI-9」Update参与者 2已保存回复 2
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 2 条
- 当前快照
- 1 份
- 快照标识符
- @miu5xg2e
- 此快照首次捕获于
- 2025/12/06 18:40 2 个月前
- 此快照最后确认于
- 2025/12/08 22:25 2 个月前
CPP
#include<iostream>
using namespace std;
int a[100010];
int pre[100010];
int log2(int x){
if(x < 2)return 0;
return log2(x/2)+1;
}
int addcnt(int x){
int v = log2(x);
int base = 1;
for(int i=1;i<=v+1;i++)base *= 2;
int q = base - x;
if(q%v == 0)return q/v;
else return q/v+1;
}
int main(){
int n,m;cin>>n>>m;
for(int i=1;i<=n;i++)cin>>a[i];
for(int i=1;i<=m;i++){
int l,r;cin>>l>>r;
pre[l]++;pre[r+1]--;
}
int op=0;
for(int i=1;i<=n;i++){
op+=pre[i];int q = op;
if(a[i] < 2)continue;
int c = addcnt(a[i]);//给log(a[i])++的代价
while(q >= c){
q-=c;
a[i] = a[i]+log2(a[i])*c;
c = addcnt(a[i]);
}
a[i] = a[i]+log2(a[i])*q;
cout<<a[i]<<" ";
}
return 0;
}
为什么后面的测试点错了
https://www.luogu.com.cn/record/251794184
回复
共 2 条回复,欢迎继续交流。
正在加载回复...