求梦熊TG组T2正解
  • 板块学术版
  • 楼主YuYuanPQ
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/6/29 18:01
  • 上次更新2024/6/29 20:55:52
查看原帖
求梦熊TG组T2正解
1029900
YuYuanPQ楼主2024/6/29 18:01

rt.

我的做法:

#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int N=1000000;
int n,Q,l;
int a[N+10],c[N+10],to[N+10];
ll ans;
struct node{
    int x;
}d[N+10];
int main()
{
    scanf("%d%d",&n,&Q);
    for(int i=1;i<=n;i++)
    {
        scanf("%d",&a[i]);
        if(!c[a[i]])
        {
            d[++l].x=a[i];
            to[a[i]]=l;
        }
        c[a[i]]++;
    }
    while(Q--)
    {
        int opt,x;
        scanf("%d%d",&opt,&x);
        if(opt==1)
        {
            if(!c[x])
            {
                d[++l].x=x;
                to[x]=l;
            }
            c[x]++;
        }
        else if(opt==2)
        {
            c[x]--;
            if(!c[x])
            {
                d[to[x]].x=0;
            }
        }
        else if(opt==3)
        {
            ans=0;
            for(int i=1;i<=l;i++)
            {
                if(!d[i].x) continue;
                //cout<<max(c[d[i].x]-x,0)<<" ";
                ans=ans+max(c[d[i].x]-x,0);
            }//cout<<endl;
            printf("%lld\n",ans);
        }
    }
    return 0;
}

算是偏正解?

2024/6/29 18:01
加载中...