Untitled
plain_text
2 months ago
1.1 kB
2
Indexable
Never
#include<set>; using namespace std; set<pair<int,int>> line[101]; bool vis[101]; void init() { for(int i=1;i<=100;i++) { line[i].clear(); vis[i]=0; } } void add(int mX, int mY) { line[mX].insert(make_pair(mY,mX+1)); line[mX+1].insert(make_pair(mY,mX)); } void remove(int mX, int mY) { line[mX].erase(make_pair(mY,mX+1)); line[mX+1].erase(make_pair(mY,mX)); } int numberOfCross(int mID) { if(line[mID].empty()) return 0; int cnt=1; int temp1 = line[mID].begin()->first; int temp2 = line[mID].begin()->second; auto it = line[temp2].upper_bound(make_pair(temp1,temp2)); while(it!=line[temp2].end()) { cnt++; it = line[it->second].upper_bound(make_pair(it->first,it->second)); temp2=it->second; } return cnt; } int participant(int mX, int mY) { int r = mY; int c = mX; auto it = line[c].lower_bound(make_pair(r,-1)); while (it != line[c].begin() && line[c].empty() == false) { it--; c = it->second; r = it->first; it = line[c].lower_bound(make_pair(r,-1)); } return c; return 0; }