ICode9

精准搜索请尝试: 精确搜索
首页 > 其他分享> 文章详细

Gym The 17th Zhejiang Provincial Collegiate Programming Contest E.Easy DP Problem(主席树)

2021-05-05 10:59:18  阅读:191  来源: 互联网

标签:Provincial 17th sz int Contest mid pos return else


 

 

const int N=1e5+5;

    int n,m,_;
    int i,j,k;
    int a[N];
    struct Node
    {
        int l,r;
        int sz;
        ll sum;
    }t[N<<5];
    int root[N],tot=0;
    vector<int> v;

void update(int &x,int y,int l,int r,int pos)
{
    x=++tot;
    t[x]=t[y];
    t[x].sz++;
    t[x].sum+=pos;
    if(l==r) return ;
    else{
        int mid=l+r>>1;
        if(mid>=pos) update(t[x].l,t[y].l,l,mid,pos);
        else update(t[x].r,t[y].r,mid+1,r,pos);
    }
}

ll query(int x,int y,int k,int l,int r)
{
    if(l==r) return l*1ll*k;
    else{
        int mid=l+r>>1;
        int sz=t[t[y].r].sz-t[t[x].r].sz;
        if(sz>=k) return query(t[x].r,t[y].r,k,mid+1,r);
        else return query(t[x].l,t[y].l,k-sz,l,mid)+t[t[y].r].sum-t[t[x].r].sum;
    }
}

int main()
{
    rush(){
        sd(n);
        tot=0;
        for(int i=1;i<=n;i++) sd(a[i]);
        for(int i=1;i<=n;i++) update(root[i],root[i-1],1,1e6,a[i]);
        sd(m);
        for(int i=1;i<=m;i++){
            int l,r,k;
            sddd(l,r,k);
            ll ans=query(root[l-1],root[r],k,1,1e6);
            ll ll=(r-l+1);
            ans+=(ll+1ll)*(2*ll+1ll)*ll/6;
            pll(ans);
        }
    }
    //PAUSE;
    return 0;
}

 

标签:Provincial,17th,sz,int,Contest,mid,pos,return,else
来源: https://blog.csdn.net/C_Dreamy/article/details/116419688

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有