Stat getStat0(int m){ Stat S; set<int> cur; for (int i = 0; i < 5; i++) if (maskGet(m, i)) { if (i != 0 && !maskGet(m, i - 1) ){ if (!cur.empty()) S.insert(cur); cur.clear(); } cur.insert(i); } if (!cur.empty()) S.insert(cur); return S; }
void SScombine(Stat &S, int i, int j){ Stat::iterator iti = SSfind(S, i); Stat::iterator itj = SSfind(S, j); if (iti == itj) return; set<int> s(*iti); for (set<int>::iterator it = itj->begin(); it != itj->end(); it++){ s.insert(*it); } S.erase(iti); S.erase(itj); S.insert(s); }
void SSinsertNew(Stat &S, int i){ set<int> s; s.insert(i); S.insert(s); }
void SSinsert(Stat &S, int i, int j){ Stat::iterator it = SSfind(S, j); assert(it != S.end()); set<int> s(*it); S.erase(it); s.insert(i); S.insert(s); }