zoukankan      html  css  js  c++  java
  • hdu 4217 Data Structure

    http://blog.ac521.org/?p=209

    题意:给你一个N,K;然后又有K个数i;表示从1,2,3…N个数 经过K次操作,每次操作是去掉第i小的数。求所有去掉数的之和;

    思路:用线段树写的,具体看代码吧

    #include<iostream>
    #include<cstdio>
    using namespace std;
    const int maxn=272144;
    int tree[maxn<<2];
    int pos;
    void build(int l,int r, int rt)
    {
        tree[rt]=r-l+1;
        if(l==r) return ;
        int m = ( l + r ) >> 1;
        build( l , m , rt << 1 );
        build( m+1 , r , rt << 1 | 1 );
    }
    void update(int p,int l,int r, int rt)
    {
        tree[rt]--;
        if(l == r)
        {
            pos = l;
            return ;
        }
        int m = ( l +  r ) >> 1;
        if(tree[rt << 1] >= p)
            update( p , l , m , rt<<1 );
        else
        {
            p -= tree[rt << 1];
            update(p,m+1,r,rt << 1 | 1);
        }
    }
    int main()
    {
        int t,n,k,ki;
        __int64 sum;
        scanf("%d",&t);
        for(int T=1;T<=t;T++)
        {
            sum=0;
            scanf("%d%d",&n,&k);
            build(1,n,1);
            for(int i=1;i<=k;i++)
            {
                scanf("%d",&ki);
                update(ki,1,n,1);
                sum+=pos;
            }
            printf("Case %d: %I64d\n",T,sum);
        }
    }
  • 相关阅读:
    vue-loader
    slot内容分发
    单向数据流
    vue父子组件(1.0)
    vue组件
    vue过渡
    vue之自定义组件
    jquery下拉菜单
    vue之过滤器
    【数学】数学归纳法
  • 原文地址:https://www.cnblogs.com/AkQuan/p/2456895.html
Copyright © 2011-2022 走看看