Untitled
unknown
plain_text
a year ago
1.6 kB
17
Indexable
#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
}
Editor is loading...
Leave a Comment