UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#212178#3816. 元素PanjunnanCompile Error//C++112.0kb2024-10-13 11:52:042024-10-13 12:30:12

answer

#include <iostream>
#include <vector>
#include <unordered_set>
#include <algorithm>

using namespace std;

const int MAXN = 100005;
int n, q;
int a[MAXN];

struct SegmentTree {
    int l, r;
    unordered_set<int> elements;
    int minElement, maxElement;
    SegmentTree *left, *right;

    SegmentTree(int l, int r) : l(l), r(r), minElement(0), maxElement(0), left(nullptr), right(nullptr) {}

    void update(int value) {
        elements.insert(value);
        if (value < minElement || minElement == 0) minElement = value;
        if (value > maxElement) maxElement = value;
    }

    void query(int l, int r, int &bestX, int &bestY, int &bestSize) {
        if (this->l > r || this->r < l) return;
        if (this->l >= l && this->r <= r) {
            if (bestSize > maxElement - minElement + 1) {
                bestX = minElement;
                bestY = maxElement;
                bestSize = maxElement - minElement + 1;
            }
            return;
        }
        if (left) left->query(l, r, bestX, bestY, bestSize);
        if (right) right->query(l, r, bestX, bestY, bestSize);
    }

    void build(int start, int end, vector<int> &values) {
        if (start == end) {
            update(values[start]);
        } else {
            int mid = (start + end) / 2;
            left = new SegmentTree(start, mid);
            right = new SegmentTree(mid + 1, end);
            for (int i = start; i <= mid; i++) left->update(values[i]);
            for (int i = mid + 1; i <= end; i++) right->update(values[i]);
        }
    }
};

int main() {
    cin >> n >> q;
    for (int i = 1; i <= n; i++) {
        cin >> a[i];
    }

    SegmentTree *tree = new SegmentTree(1, n);
    tree->build(1, n, a);

    while (q--) {
        int l, r;
        cin >> l >> r;
        int bestX = 0, bestY = 0, bestSize = INT_MAX;
        tree->query(l, r, bestX, bestY, bestSize);
        cout << bestY - bestX + 1 << endl;
    }

    return 0;
}

详细

answer.code: In function 'int main()':
answer.code:60:24: error: no matching function for call to 'SegmentTree::build(int, int&, int [100005])'
     tree->build(1, n, a);\x0d
                        ^
answer.code:60:24: note: candidate is:
answer.code:40:10: note: void SegmentTree::build(int, int, std::vector<int>&)
     void build(int start, int end, vector<int> &values) {\x0d
          ^
answer.code:40:10: note:   no known conversion for argument 3 from 'int [100005]' to 'std::vector<int>&'
answer.c...