想了很久,才知道用线段树来做,实现也不算太复杂。

#include<iostream>
#include<cstdio>
#include<cstring>
using namespace std;
#define SIZE 262145
struct node
{
    int i,left,right,sum;
};
node vert[SIZE<<2];
int treeNode;
int build(int i,int left,int right)
{
    int mid;
    vert[i].left=left;
    vert[i].right=right;
    vert[i].sum=right-left+1;
    if(left==right)
    {
        vert[i].i=++treeNode;
        return 0;
    }

    mid=(left+right)>>1;
    build(i<<1,left,mid);
    build((i<<1)+1,mid+1,right);

    return 0;
}
int query(int i,int n,int goal)
{
    int res;
    if(vert[i].left==vert[i].right)
    {
        vert[i].sum=0;
        return vert[i].i;
    }

    if(goal <= vert[i<<1].sum)  
    {
        res = query(i<<1,n,goal);
    }
    else
    {
        res = query((i<<1)+1,n,goal-vert[i<<1].sum);
    }
    vert[i].sum--;
    return res;
}
int main()
{
    int i,k,m,n,inum,count=0;
    __int64 sum;
    scanf("%d",&inum);
    while(inum--)
    {
        count++; sum=0; treeNode=0;
        scanf("%d %d",&n,&m);
        build(1,1,n);
        for(i=0;i<m;i++)
        {
            scanf("%d",&k);
            sum+=query(1,n,k);
        }
        printf("Case %d: %I64d\n",count,sum);
    }
    return 0;
}
优质内容筛选与推荐>>
1、.NET平台微服务项目汇集
2、华歌智能家居选择云翌通云总机平台让客户尽享智慧优越体验
3、springboot(十九):使用SpringBootActuator监控应用
4、WCF入门(11)
5、.NETCore2.0正式发布信息汇总


长按二维码向我转账

受苹果公司新规定影响,微信 iOS 版的赞赏功能被关闭,可通过二维码转账支持公众号。

    阅读
    好看
    已推荐到看一看
    你的朋友可以在“发现”-“看一看”看到你认为好看的文章。
    已取消,“好看”想法已同步删除
    已推荐到看一看 和朋友分享想法
    最多200字,当前共 发送

    已发送

    朋友将在看一看看到

    确定
    分享你的想法...
    取消

    分享想法到看一看

    确定
    最多200字,当前共

    发送中

    网络异常,请稍后重试

    微信扫一扫
    关注该公众号