利用二分查找,一层一层的找,将时间复杂度控制在O(nlogn)
#include <stdio.h>
#include <iostream>
#include <string>
#include <string.h>
#include <algorithm>
#include <stdlib.h>
#include <math.h>
#include <vector>
#include <map>
using namespace std;
const int maxn = 1005;
int matrix[maxn][maxn];
int m,n,t;
int bs(int left,int right,int t,int i){
int l = left,r = right;
int m ;
while(l <= r){
m = (l + r) >> 1;
if(matrix[i][m] == t)
return 1;
else if(matrix[i][m] < t)
l = m + 1;
else if (matrix[i][m] > t)
r = m - 1;
}
return 0;
}
void sovle(){
int flag = 0;
for(int i = 0;i < m;i++){
flag ^= bs(0, n-1, t, i);
}
if (flag)
printf("Yes\n");
else
printf("No\n");
}
int main(){
while(~scanf("%d%d",&m,&n)){
scanf("%d",&t);
for(int i = 0;i < m;i++){
for(int j = 0;j < n;j++){
scanf("%d",matrix[i]+j);
}
}
sovle();
}
return 0;
}