HUD-4217-Data Structure?

来源:互联网 发布:德军总部2 知乎 编辑:程序博客网 时间:2024/05/16 01:02

//题意就是给你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 longconst 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;}


0 0
原创粉丝点击