Untitled

mail@pastecode.io avatar
unknown
plain_text
12 days ago
1.6 kB
2
Indexable
Never
#include <iostream>
#include <set>
#include <utility>
using namespace std;

set<pair<int, int>> user[101];  // Mỗi mảng đại diện cho một user, chứa các cặp giá trị (user khác, Y)

void init() {
    for (int i = 1; i <= 100; i++) {
        user[i].clear();  // Xóa sạch dữ liệu của từng user
    }
}

void add(int mX, int mY) {
    user[mX].insert(make_pair(mX + 1, mY));  // Thêm mối quan hệ giữa mX và mX+1
    user[mX + 1].insert(make_pair(mX, mY));  // Thêm mối quan hệ ngược lại giữa mX+1 và mX
}

void remove(int mX, int mY) {
    user[mX].erase(make_pair(mX + 1, mY));  // Xóa mối quan hệ giữa mX và mX+1
    user[mX + 1].erase(make_pair(mX, mY));  // Xóa mối quan hệ ngược lại giữa mX+1 và mX
}

int numberOfCross(int mID) {
    int id = mID;
    int res = 0;
    auto it = user[id].upper_bound(make_pair(id, 0));  // Tìm cặp có giá trị Y lớn hơn 0
    while (it != user[id].end()) {
        res++;
        int next_id = it->first;
        it = user[next_id].upper_bound(make_pair(next_id, it->second));  // Chuyển sang user tiếp theo
        id = next_id;
    }
    return res;  // Trả về số lần cross
}

int participant(int mX, int mY) {
    int id = mX;
    auto it = user[id].lower_bound(make_pair(mX, mY));  // Tìm cặp có giá trị Y >= mY
    while (it != user[id].begin()) {
        --it;
        int prev_id = it->first;
        it = user[prev_id].lower_bound(make_pair(prev_id, it->second));  // Di chuyển ngược lại user trước đó
        id = prev_id;
    }
    return id;  // Trả về ID của participant
}
Leave a Comment