求调
查看原帖
求调
964822
protractor半圆仪楼主2023/8/25 21:59
#include<iostream>
#include<algorithm>
#include<vector>
#include<map>
using namespace std;
struct vec{
    vector<int> v;
    int c,f,l;
}a[30050];
map<int,bool> mp[30050];
int n,m,q,s[30050];
int main()
{
    cin>>n>>m>>q;
    for(int i=1;i<=n;i++) 
    {
        cin>>a[i].c;
        for(int j=1;j<=a[i].c;j++)
        {
            int x;
            cin>>x;
            a[i].v.push_back(x);
            mp[i][x]=1;
        }
        sort(a[i].v.begin(),a[i].v.end());
        a[i].f=a[i].c-1;
        a[i].l=0;
    }
    for(int i=1;i<=q;i++)
    {
    	int op,x,y;
    	cin>>op>>x>>y;
    	if(op==1||op==2)
    	{
    		if(op==1) s[x]+=y;
    		else s[x]-=y;
    		if(s>0) while(a[x].v[a[x].f]+s[x]>m)
			{
				if(a[x].f<a[i].l) break;
				mp[x][a[x].v[a[x].f]]=0;
				a[x].f--;
			}
			if(s<0) while(a[x].v[a[x].l]+s[x]<1)
			{
				if(a[i].f<a[i].l) break;
				mp[x][a[x].v[a[x].l]]=0;
				a[x].l++;
			}
		}
		if(op==3)
		{
		    int ans=0;
		    for(int j=0;j<a[x].c;j++) if(mp[y][a[x].v[j]]+s[x]-s[y]) ans++;
		    cout<<ans<<endl;
		}
		if(op==4)
		{
		    int ans=a[y].c;
		    for(int j=0;j<a[x].c;j++) if(!(mp[y][a[x].v[j]]+s[x]-s[y])) ans++;
		    cout<<ans<<endl;
		}
		if(op==3)
		{
		    int ans=0;
		    for(int j=0;j<a[x].c;j++) if((!mp[y][a[x].v[j]]+s[x]-s[y])) ans++;
		    for(int j=0;j<a[y].c;j++) if((!mp[x][a[y].v[j]]+s[x]-s[y])) ans++;
		    cout<<ans<<endl;
		}
	}
    return 0;
}
2023/8/25 21:59
加载中...