开纵横两个结构体数组,记录连续涂了一整行或者一整列的情况
再开一个map,记录涂点
#include<iostream> #include<algorithm> #include<map> #include<utility> using namespace std; typedef pair<int,int> P; struct node{ int color,time; }x[2010],y[2010]; map<P,node> mp; int main(){ ios::sync_with_stdio(0); cin.tie(0);cout.tie(0); int T,n,m,q,i,tm,kd,a,b,cl,d1,d2,d3; node dd; cin>>T; while(T--){ cin>>n>>m>>q; mp.erase(mp.begin(),mp.end()); for(i=1;i<=n;i++){ x[i].color=-1; x[i].time=0; } for(i=1;i<=m;i++){ y[i].color=-1; y[i].time=0; } tm=1; for(i=0;i<q;i++){ cin>>kd; if(kd==1){ cin>>a>>cl; x[a].color=cl; x[a].time=tm++; } else if(kd==2){ cin>>b>>cl; y[b].color=cl; y[b].time=tm++; } else if(kd==3){ cin>>a>>b>>cl; dd.color=cl; dd.time=tm++; mp[P(a,b)]=dd; } else{ cin>>a>>b; d1=x[a].time; d2=y[b].time; d3=-1; if(mp.find(P(a,b))!=mp.end()) d3=mp[P(a,b)].time; if(d1>d2&&d1>d3) cout<<x[a].color<<endl; else if(d2>d1&&d2>d3) cout<<y[b].color<<endl; else cout<<mp[P(a,b)].color<<endl; } } } return 0; }