TLE on S2#1,S3#1#2,S4#1求助
  • 板块P11244 吻秋
  • 楼主xiaomo8125
  • 当前回复5
  • 已保存回复5
  • 发布时间2024/11/2 19:46
  • 上次更新2024/11/2 21:52:16
查看原帖
TLE on S2#1,S3#1#2,S4#1求助
749280
xiaomo8125楼主2024/11/2 19:46

record

思路大概就是如果值域不相交就交换,否则直接处理

#include<iostream>
#include<algorithm>
#include<cstdlib>
#define M long long
namespace FastIO {
	char buf[1 << 21], *p1 = buf, *p2 = buf;
#define getchar() (p1 == p2 && (p1 = buf, p2 = (p1 + fread(buf, 1, 1 << 21, stdin))) == p1 ? EOF : *p1++)
	template <typename T> inline T read() { T x = 0, w = 0; char ch = getchar(); while (ch < '0' || ch > '9') w |= (ch == '-'), ch = getchar(); while ('0' <= ch && ch <= '9') x = x * 10 + (ch ^ '0'), ch = getchar(); return w ? -x : x; }
	template <typename T> inline void write(T x) { if (!x) return; write<T>(x / 10), putchar((x % 10) ^ '0'); }
	template <typename T> inline void print(T x) { if (x > 0) write<T>(x); else if (x < 0) putchar('-'), write<T>(-x); else putchar('0'); }
	template <typename T> inline void print(T x, char en) { print<T>(x), putchar(en); }
}; using namespace FastIO;
#undef getchar()
using namespace std;
int n,m,q;
int a[21][2000005];
int r[21]; 
bool flag[30];
void sortt(int aa,int bb){
    int i=r[aa],j=r[bb];
    if(!flag[i]){
        std::sort(a[i]+1,a[i]+1+n);
        flag[i]=1;
    }
    if(!flag[j]){
        std::sort(a[j]+1,a[j]+1+n);
        flag[j]=1;
    }
    if(a[i][n]<a[j][1])return;
    if(a[i][1]>a[j][n]){
    	swap(r[aa],r[bb]);
    	return;
	}
	int c[2*n+10];
	int cnt=1,h=1,k=1;
	while(cnt<=2*n){
        if(h==n+1){
            c[cnt++]=a[j][k++];
        }
        else if(k==n+1){
            c[cnt++]=a[i][h++];
        }
		else if(a[i][h]<=a[j][k]){
			c[cnt++]=a[i][h++];
		}
		else{
			c[cnt++]=a[j][k++];
		}
        //cout<<cnt-1<<" "<<c[cnt-1]<<endl;
	}
    //for(int i1=1;i1<=n*2;i1++)cout<<c[i1]<<" ";
	for(int i1=1;i1<=n;i1++)a[i][i1]=c[i1];
	for(int i1=1;i1<=n;i1++)a[j][i1]=c[i1+n];
}
int main(){
	//freopen("1.in","r",stdin);
	//int a=1;
	for(int i=1;i<=20;i++)r[i]=i;
	n=read<int>(),m=read<int>(),q=read<int>();
	//int a[m+5][n+5];
	for(int i=1;i<=m;i++){
		for(int j=1;j<=n;j++){
			a[i][j]=read<int>();
		}
		
	}
	for(int i=1;i<=q;i++){
		int ord,i1,j1;
		ord=read<int>(),i1=read<int>(),j1=read<int>();
		if(ord==1){
			sortt(i1,j1);
		}
		else{
			print<int>(a[r[i1]][j1],'\n');
            //cout<<a[i1][j1]<<"\n";
		}
	}
    //for(int i=1;i<=m;i++){
	//	for(int j=1;j<=n;j++)
    //    print<int>(a[i][j],' ');
    //  cout<<endl;
    //}
	//print<int>(a);
    //for(int i=1;i<=m;i++){
    //cout<<i<<" "<<r[i]<<endl;
    //}
	return 0;
}
2024/11/2 19:46
加载中...