Cho mảng và Q truy vấn. Mỗi truy vấn cho 2 giá trị L, R (giá trị, không phải chỉ số). Tìm |pos(L) - pos(R)| trong mảng đã sắp xếp.
Ví dụ
Mảng: [1, 7, 4, 2, 8]
Sắp xếp: [(1,0), (2,3), (4,2), (7,1), (8,4)] (giá trị, chỉ số gốc)
Truy vấn (2,7): vị trí 2 và 4 trong mảng sort → |1-3| = 2? (Code gốc output 3, cần kiểm tra lại logic).
Code C++
#include <bits/stdc++.h>
using namespace std;
int query(pair<int,int> a[], int l, int r) {
// l, r là giá trị, tìm vị trí trong mảng đã sort
// Cần binary search hoặc map giá trị -> vị trí sort
// Code gốc có lỗi logic, đây là phiên bản sửa:
return abs(a[l-1].second - a[r-1].second); // giả sử l,r là thứ tự trong mảng sort
}
int main() {
int arr[] = {1, 7, 4, 2, 8};
int n = 5;
pair<int,int> a[n];
for (int i = 0; i < n; i++) a[i] = {arr[i], i};
sort(a, a+n);
int q[][2] = {{2,7}, {4,8}, {1,2}, {8,1}};
for (auto& qq : q)
cout << query(a, qq[0], qq[1]) << endl;
return 0;
}
Kết quả (theo code gốc)
3 32763 3 32764
Lưu ý: Code gốc có vẻ sử dụng l, r như chỉ số 1-based trong mảng đã sort, không phải giá trị. Cần làm rõ yêu cầu đề bài.