码迷,mamicode.com
首页 > 其他好文 > 详细

CF 85D 综合练习1

时间:2020-03-13 13:25:59      阅读:72      评论:0      收藏:0      [点我收藏+]

标签:line   write   inline   template   没有   一个   char s   c++   max   

题意:

一个集合,初始为空。现有三个操作:

  1. add:向集合里加入数x,保证加入前集合中没有数x;

  2. del:从集合中删除数x,保证删除前集合中有x;

  3. sum:询问将集合里的数从小到大排序后,求下标i模5余3的数的和。

现有n次操作,对于每个查询操作,输出答案


很显然,权值线段树,每个节点存 5 个数即可,分别是下标 \(\bmod 5\)\(0,1,2,3,4\) 的数的个数

然后 pushup 的时候稍微改改即可

// This code writed by chtholly_micromaker(MicroMaker)
#include <bits/stdc++.h>
#define reg register
#define int long long
using namespace std;
const int MaxN=100050;
template <class t> inline void read(t &s)
{
    s=0;
    reg int f=1;
    reg char c=getchar();
    while(!isdigit(c))
    {
        if(c=='-')
            f=-1;
        c=getchar();
    }
    while(isdigit(c))
        s=(s<<3)+(s<<1)+(c^48),c=getchar();
    s*=f;
    return;
}
#define lson ls[u]
#define rson rs[u]
int val[MaxN<<4][5];
int siz[MaxN<<4];
int ls[MaxN<<4],rs[MaxN<<4];
int n,cnt=1;
inline void pushup(int u)
{
    siz[u]=siz[lson]+siz[rson];
    for(int i=0;i<5;++i)
        val[u][i]=val[lson][i]+val[rson][((i-siz[lson])%5+5)%5];
    return;
}
inline void modify(int &u,int l,int r,int p,int k)
{
    if(!u)
        u=++cnt;
    if(l==r)
    {
        val[u][1]+=p*k;
        siz[u]+=k;
        return;
    }
    reg int mid=(l+r)>>1;
    if(p<=mid)
        modify(lson,l,mid,p,k);
    else
        modify(rson,mid+1,r,p,k);
    pushup(u);
    return;
}
signed main(void)
{
    char s[5];
    cin>>n;gets(s);
    reg int x,rt=1;
    for(int i=1;i<=n;++i)
    {
        scanf("%s",s);
        if(s[0]=='a')
        {
            read(x);
            modify(rt,1,1e9+1,x,1);
        }
        else if(s[0]=='d')
        {
            read(x);
            modify(rt,1,1e9+1,x,-1);
        }
        else
            printf("%lld\n",val[1][3]);
    }
    return 0;
}

CF 85D 综合练习1

标签:line   write   inline   template   没有   一个   char s   c++   max   

原文地址:https://www.cnblogs.com/chinesepikaync/p/12485600.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!