2 条题解

  • 1
    @ 2026-8-3 14:42:54

    我就不用multiset!!!

    multiset和set的区别就是set无法重复插入,所以难以计数,但我们可以直接开一个数组来记录一个数插入set的次数,注意到x<=1e9x<=1e9,所以普通数组存不下,开一个map即可解决问题

    完美AC

    #include<bits/stdc++.h>
    using namespace std;
    set<int>s;map<int,int>a;
    int main()
    {
    	int q;scanf("%d",&q);a.clear();
    	while(q--)
    	{
    		int op,x,y;scanf("%d",&op);
    		if(op==1)
    		{
    			scanf("%d",&x);
    			s.insert(x);a[x]++;
    		}
    		if(op==2)
    		{
    			scanf("%d%d",&x,&y);
    			if(a[x]<=y)s.erase(x),a[x]=0;
    			else a[x]-=y;
    		}
    		if(op==3)printf("%d\n",*s.rbegin()-*s.begin());
    	}
    	return 0;
    }
    
    • 0
      @ 2026-7-16 8:55:54
      #include <bits/stdc++.h>
      using namespace std;
      int main()
      {
      	int q;
      	cin >> q; 
      	multiset<int> s;
      	while(q--)
      	{
      		int op, x, c;
      		cin >> op;
      		if(op == 1)
      		{
      			cin >> x;
      			s.insert(x);
      		}
      		else if(op == 2)
      		{
      			cin >> x >> c;
      			while(c-- && s.find(x) != s.end())
      			{
      				s.erase(s.find(x));
      			}
      		}
      		if(op == 3)
      		{
      			cout << *s.rbegin() - *s.begin() << endl;
      		}
      	}
      	return 0;
      }
      
      • 1

      *【STL:multiset】[ABC253C] Max - Min Query

      信息

      ID
      9931
      时间
      2000ms
      内存
      1024MiB
      难度
      6
      标签
      递交数
      79
      已通过
      27
      上传者