社区讨论

求助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 条回复,欢迎继续交流。

正在加载回复...