Algorithm Notes

LJXin

记录算法刷题、竞赛思路与编程成长,希望每一篇都讲清楚一点、写扎实一点。

# CF_1927_D#Find the Different Ones!

CF_Div2_1927_D

原题链接

题目描述

给定 n 个元素的序列 a,进行 q 次询问。每次询问给定 l, r,求在区间 [l, r] 内是否存在满足 l ≤ i, j ≤ r 且 a[i] ≠ a[j] 的 i, j。
如果存在,则输出任意一种可能情况。

思路剖析

只需要找到与 a[l] 不同的最小下一个位置 j
如果 j > r,说明区间内所有元素都相等,答案为不存在;否则存在。
可以预处理每个位置的“下一个不同元素位置”。

代码实现

void solve() {
    int t, n, q;
    cin >> t >> n >> q;
    while (t--) {
        cin >> n;
        vector<int> a(n);
        for (auto &x : a) cin >> x;
        vector<int> diff(n);
        for (int l = 0, r = 1; l < n; ++r) {
            while (a[l] != a[r]) {
                diff[l] = r;
                l++;
            }
        }
        cin >> q;
        for (int i = 0; i < q; ++i) {
            int l, r;
            cin >> l >> r;
            l--, r--; // 0-based
            if (diff[l] > r) {
                cout << "-1 -1" << endl;
            } else {
                cout << l << ' ' << diff[l] << endl;
            }
        }
    }
}

AI 使用说明:仅使用 AI 进行排版

posted @ 2026-04-16 21:03  kliu_365  阅读(10)  评论(0)    收藏  举报
TOP