中位数(树状数组+二分)

L-中位数_2023河南萌新联赛第(一)场:河南农业大学 (nowcoder.com)

树状数组+二分

中位数(树状数组+二分)_第1张图片

 

#include 
using namespace std;
typedef long long ll;
const int N=2e6;
const long long inf = 0x7f7f7f7f7f7f7f7f;
#define endl '\n'
int f[N];
int n,m;
int lowbit(int x){
    return x&(-x);
}
int a[N];
void add(int x,int y){
    for(int i=x;i<=1e6;i+=lowbit(i)){
        f[i]+=y;
    }
}
int sum(int x){
    ll res=0;
    for(int i=x;i;i-=lowbit(i)){
       res+=f[i];
    }
    return res;
}
int check(int mid){
//     cout<=(n+1)/2)return 1;
    else return 0;
}
int main(){
    cin>>n>>m;
    for(int i=1;i<=n;i++){
        cin>>a[i];
        add(a[i],1);
    }
    while(m--){
        int p,x;
        cin>>p>>x;
        add(a[p],-1);
        a[p]=x;
        add(a[p],1);
        ll l=0,r=1e6;
        while(l<=r){
            ll mid=(l+r)/2;
//             cout<

 

你可能感兴趣的:(比赛错题集,算法,c++)