第一题
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N];
int main(){
    int n, k;
    scanf("%d%d", &n, &k);
    int cnt = 1, sum = 0;
    while(n > 1 && k > 0){
        if(k >= cnt)k -= cnt;
        else break;
        sum += 1;
        n = (n + 1) / 2;
       // printf("%d %d %d %d\n", n, k, sum, cnt);
        cnt *= 2;
    }
    printf("%d\n", sum + n);
}

第三题
#include <bits/stdc++.h>
using namespace std;
const int N = 100010;
int a[N];
int main(){
    int n, k;
    scanf("%d%d", &n, &k);
    for(int i = 0; i < n; i++){
        scanf("%d", &a[i]);
    }
    sort(a, a + n);
    int cnt = 0, sum = 0;
    for(int i = 0; i < n; i++){
        int x = a[i] - sum;
        if(x == 0)continue;
        if(cnt >= k)break;
        printf("%d\n", x);
        sum += x;
        cnt += 1;
    }
    while(cnt < k){
        printf("0\n");
        cnt++;
    }
}

第二题不是数组前缀和的绝对值么,为啥只过了70%?