結果

問題 No.2978 Lexicographically Smallest and Largest Subarray
ユーザー V_Melville
提出日時 2024-12-03 16:34:28
言語 C++23
(gcc 13.3.0 + boost 1.87.0)
結果
AC  
実行時間 200 ms / 2,000 ms
コード長 1,183 bytes
コンパイル時間 3,203 ms
コンパイル使用メモリ 247,508 KB
実行使用メモリ 25,460 KB
平均クエリ数 1499.00
最終ジャッジ日時 2024-12-03 16:34:45
合計ジャッジ時間 16,646 ms
ジャッジサーバーID
(参考情報)
judge2 / judge3
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
other AC * 57
権限があれば一括ダウンロードができます

ソースコード

diff #
プレゼンテーションモードにする

#include <bits/stdc++.h>
#define rep(i, n) for (int i = 0; i < (n); ++i)
using namespace std;
int get(int l1, int r1, int l2, int r2) {
cout << "? " << l1 << ' ' << r1 << ' ' << l2 << ' ' << r2 << '\n';
int res;
cin >> res;
return res;
}
int main() {
int n, q;
cin >> n >> q;
vector<int> small, large;
for (int i = 1; i <= n; i += 2) {
int x = get(i, n, i+1, n);
if (x == 1) {
small.push_back(i);
large.push_back(i+1);
}
else if (x == 0) {
small.push_back(i+1);
large.push_back(i);
}
else return 0;
}
int smallest = small[0];
for (int i = 1; i < small.size(); ++i) {
int x = get(small[i], small[i], smallest, smallest);
if (x == 1) smallest = small[i];
else if (x == -1) return 0;
}
int largest = large[0];
for (int i = 1; i < large.size(); ++i) {
int x = get(largest, n, large[i], n);
if (x == 1) largest = large[i];
else if (x == -1) return 0;
}
cout << "! " << smallest << ' ' << smallest << ' ' << largest << ' ' << n << '\n';
return 0;
}
הההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההההה
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
0