1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83
| #include <bits/stdc++.h>
using namespace std;
const int NUM = 3e5 + 100;
int data[NUM][10];
bool check(int value, int n, int m, pair<int, int> &ans) { map<unsigned, int> s; for (int i = 0; i < n; ++i) { unsigned temp = 0; for (int j = 0; j < m; ++j) { temp <<= 1u; temp |= data[i][j] > value; } s.insert({temp, i}); } unsigned tar = -1u >> (sizeof(int) * 8 - m); for (auto iter1 = s.begin(); iter1 != s.end(); ++iter1) { for (auto iter2 = iter1; iter2 != s.end(); ++iter2) { if ((iter1->first | iter2->first) == tar) { ans.first = iter1->second; ans.second = iter2->second; return true; } } } return false; }
void solve() { int n, m; cin >> n >> m; int l = INT_MAX, r = 0; for (int i = 0; i < n; ++i) { for (int j = 0; j < m; ++j) { cin >> data[i][j]; l = min(l, data[i][j]); r = max(r, data[i][j]); } } int mid, cnt = r - l; pair<int, int> ans; while (cnt > 0) { int step = cnt / 2; mid = l + step; if (check(mid, n, m, ans)) { l = mid + 1; cnt -= step + 1; } else cnt /= 2; } cout << ans.first + 1 << " " << ans.second + 1 << endl; }
signed main() { ios_base::sync_with_stdio(false); cin.tie(nullptr); cout.tie(nullptr); #ifdef ACM_LOCAL freopen("in.txt", "r", stdin); freopen("out.txt", "w", stdout); long long test_index_for_debug = 1; char acm_local_for_debug; while (cin >> acm_local_for_debug) { cin.putback(acm_local_for_debug); if (test_index_for_debug > 20) { throw runtime_error("Check the stdin!!!"); } auto start_clock_for_debug = clock(); solve(); auto end_clock_for_debug = clock(); cout << "Test " << test_index_for_debug << " successful" << endl; cerr << "Test " << test_index_for_debug++ << " Run Time: " << double(end_clock_for_debug - start_clock_for_debug) / CLOCKS_PER_SEC << "s" << endl; cout << "--------------------------------------------------" << endl; } #else solve(); #endif return 0; }
|