HUD-4217-Data Structure?

//题意就是给你1-n的数,叫你每次删除第K小的数,求删除这些数的和//

AC代码:

#include<stdio.h>
#include<string.h>
#include<algorithm>
using namespace std;
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
#define LL long long
const int MAX=262145; int sum[MAX<<2]; void build(int l,int r,int rt) {
    sum[rt]=r-l+1;//一共有多少个节点
 if(l==r) { return; } int m=(l+r)>>1;
    build(lson);
    build(rson); } int updata(int x,int l,int r,int rt) {
    sum[rt]--; if(l==r) { return l; } int m=(l+r)>>1; if(sum[rt<<1]>=x)
        updata(x,lson); else
        updata(x-sum[rt<<1],rson);//x-sum[rt<<1]代表它在右边的第几小
} int main() { int t;
    scanf("%d",&t); int k=1; while(t--) { int n,m;
        scanf("%d%d",&n,&m);
        build(1,n,1); int i; int x;
        LL s=0; for(i=1;i<=m;i++) {
            scanf("%d",&x);
            s+=updata(x,1,n,1); }
        printf("Case %d: %lld\n",k++,s); } return 0; }


你可能感兴趣的:(HUD-4217-Data Structure?)