求助!第一个解决悬赏一关注!
查看原帖
求助!第一个解决悬赏一关注!
678447
CSPAK_Zhangxiuqi0011楼主2024/5/4 10:11
#include<bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX LONG_LONG_MAX
#define INT_MIN LONG_LONG_MIN
vector<int>a[1000005];
int n,m,t;
int work(int mid) {
	int maxy;
	maxy = INT_MIN;
	for(int i = 1; i<=n; i++) {
		for(int j = 1; j<=m; j++) {
			if(a[i][j]<mid && j<maxy) {
				return 0;
			} else if(a[i][j]<mid) {
				maxy = j;
			}
		}
	}
	return 1;
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--) {
		cin>>n>>m;
		for(int i = 1; i<=n; i++) {
			a[i].push_back(0);
			for(int j = 1; j<=m; j++) {
				int x;
				cin>>x;
				a[i].push_back(x);
			}
		}
		int l = 0,r = n*m;
		while(l<=r) {
			int mid;
			mid = (l+r)/2;
			if(work(mid)) {
				l = mid+1;
			} else {
				r = mid-1;
			}
		}
		cout<<r<<"\n";
	}
	return 0;
}

本人像上面这样写就不对,可是把二维改成一维就过了!

#include<bits/stdc++.h>
using namespace std;
#define int long long
#define INT_MAX LONG_LONG_MAX
#define INT_MIN LONG_LONG_MIN
int a[1000005];
int n,m,t;
int work(int mid) {
	int maxy;
	maxy = INT_MIN;
	for(int i = 1; i<=n; i++) {
		for(int j = 1; j<=m; j++) {
			if(a[(i-1)*m+j]<mid && j<maxy) {
				return 0;
			} else if(a[(i-1)*m+j]<mid) {
				maxy = j;
			}
		}
	}
	return 1;
}
signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cout.tie(0);
	cin>>t;
	while(t--) {
		cin>>n>>m;
		for(int i = 1; i<=n*m; i++) {
			cin>>a[i];
		}
		int l = 0,r = n+m-1;
		while(l<=r) {
			int mid;
			mid = (l+r)/2;
			if(work(mid)) {
				l = mid+1;
			} else {
				r = mid-1;
			}
		}
		cout<<r<<"\n";
	}
	return 0;
}

求助QAQ

2024/5/4 10:11
加载中...