#include #include #include using namespace std; const int depth = 17; const int INF = 114514; class Segtree { int data[1 << (depth + 1)]; public: Segtree() { for (int i = 0; i < (1 << (depth + 1)); i++) { data[i] = -INF; } } void update(int pos, int x) { pos += (1 << depth) - 1; data[pos] = x; while (pos > 0) { pos = (pos - 1) / 2; data[pos] = max(data[pos * 2 + 1], data[pos * 2 + 2]); } } int getMax() { return data[0]; } int getNum(int pos) { return data[pos + (1 << depth) - 1]; } }; Segtree seg; vector eid[100000]; //eid[i] = 頂点iにくっついている辺の番号 int main() { int n, m, i, a, b; cin >> n >> m; for (i = 0; i < m; i++) { cin >> a >> b; seg.update(i, a); //辺iを消すにはa番以上の頂点を消す必要がある eid[a].push_back(i); eid[b].push_back(i); } static bool used[100000] = {false}; while (true) { int id = seg.getMax(); if (id < 0) break; //頂点idを消す for (i = 0; i < eid[id].size(); i++) { seg.update(eid[id][i], -INF); } used[id] = true; } for (i = n - 1; i >= 0; i--) if (used[i]) break; for (; i >= 0; i--) cout << used[i]; cout << endl; return 0; } //最近バグが多くてつらみ