Реши на с++ задачу с фото
Creato il: 22 aprile 2026
Creato il: 22 aprile 2026
Реши на с++ задачу с фото
Вот решение на C++.
Идея простая: для каждого числа надо знать самую левую и самую правую позицию. Тогда расстояние между одинаковыми элементами равно right - left, а ответ — максимум по всем значениям.
Чтобы уложиться в память при N до 1000000, удобно сохранить пары
(значение, позиция), отсортировать их по значению и пройти по группам одинаковых чисел.
cpp#include <iostream> #include <vector> #include <algorithm> using namespace std; struct Item { long long value; int pos; }; bool cmp(const Item& a, const Item& b) { if (a.value != b.value) return a.value < b.value; return a.pos < b.pos; } int main() { ios::sync_with_stdio(false); cin.tie(nullptr); int N; cin >> N; vector<Item> a(N); for (int i = 0; i < N; ++i) { cin >> a[i].value; a[i].pos = i; } sort(a.begin(), a.end(), cmp); int ans = 0; int i = 0; while (i < N) { int j = i; int firstPos = a[i].pos; int lastPos = a[i].pos; while (j < N && a[j].value == a[i].value) { lastPos = a[j].pos; ++j; } ans = max(ans, lastPos - firstPos); i = j; } cout << ans << '\n'; return 0; }
Как это работает на примере:
1 2 3 1 2 2 4 5 6 7
1: позиции 0 и 3, расстояние 32: позиции 1, 4, 5, максимальное расстояние 5 - 1 = 4Ответ: 4.
Если хочешь, я могу сразу дать и более короткую версию, а также объяснение построчно для сдачи.