这份代码复杂度是多少?
  • 板块P11244 吻秋
  • 楼主nahidaa
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/11/3 14:37
  • 上次更新2024/11/3 18:14:07
查看原帖
这份代码复杂度是多少?
596945
nahidaa楼主2024/11/3 14:37

传送门

#include<bits/stdc++.h>
#define ll long long 
using namespace std;
ll n,m,q,qq,x,y,b[2000005],c[4000005],l,r,ge,zhen[25],xx,yy;
bool o[25][25],p[25],oo[25][25];
vector<int>a[25];
ll read(){
	ll x=0,sign=1;char c=getchar();
	while(!(c>='0'&&c<='9')){if(c=='-')sign=-1;c=getchar();}
	while(c>='0'&&c<='9'){x=x*10+c-'0';c=getchar();}
	return x*sign;
}
void doo(int x,int y){
	xx=zhen[x],yy=zhen[y];
	if(!p[x]){sort(a[xx].begin(),a[xx].end());p[x]=1;}
	if(!p[y]){sort(a[yy].begin(),a[yy].end());p[y]=1;}
	
	if(a[xx][m]<=a[yy][1])return;
	if(a[xx][1]>=a[yy][m]){swap(zhen[x],zhen[y]);return;}
	
	l=r=1,ge=0;
	while(l<=m&&r<=m){
		if(a[xx][l]<=a[yy][r]){c[++ge]=a[xx][l];l++;}
		else{c[++ge]=a[yy][r];r++;}
	}
	
	if(l==m+1){while(ge<=2*m){c[++ge]=a[yy][r];r++;}}
	else{while(ge<=2*m){c[++ge]=a[xx][l];l++;}}
	for(int j=1;j<=m;++j){a[xx][j]=c[j];a[yy][j]=c[j+m];}
}
int main()
{
//	freopen("read.in","r",stdin);
//	freopen("A.out","w",stdout);
	m=read(),n=read(),q=read();
	for(int i=1;i<=n;++i){
		zhen[i]=i;a[i].push_back(0);
		for(int j=1;j<=m;++j){a[i].push_back(read());}
	}
	for(int i=1;i<=q;++i){
		qq=read();
		x=read(),y=read();
		if(qq==1){doo(x,y);}
		else{cout<<a[zhen[x]][y]<<"\n";}
	}
	
	return 0;
}
/*

*/
2024/11/3 14:37
加载中...