#include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include #include using namespace std; using LL = long long; const LL base = 1000000007; const int MAX = 5 * 1e6 + 100; int z1[MAX], z2[MAX]; int n ; int z[MAX]; int check2(int a, int b) { if (a==1) { z[b] = 1; for (int i=1; i<=n; ++i) { if (z[i] ==1 && z[i-1] == 1 && z[i+1] ==1) continue; if (z2[i] <0) { if (z[i] >0) { int x = 0; } continue; } for (int j=z1[i]; j<= z2[i]; ++j) { if (z[j] ==0) { int x = 0; } } if (z[z1[i] - 1] >0) { int x = 0; } if (z[z2[i] + 1] >0) { int x = 0; } } return -1; } for (int i=1; i<=n; ++i) { if (i!=b && z[i] == 0) return i; } return n+1; } int check(int a, int b) { if (a==1) { if (z1[b] >=0) return -1; int x = b, y = b; z1[b] = z2[b] = b; if (z1[b-1] >=0) { x = z1[b-1]; } if (z2[b+1] >=0) { y = z2[b+1]; } z1[x] = z1[y] = x; z2[x] = z2[y] = y; return -1; } int g; if (z2[1] <0) g = 1; else g = z2[1] + 1; if (b == g) { ++ g; if (z2[g] >=0) g = z2[g] +1; } return g; } vector zg; void test() { memset(z1, -1, sizeof(z1)); memset(z2, -1, sizeof(z1)); memset(z, 0, sizeof(z)); n = 20; zg.clear(); for (int i=0; i>n; memset(z1, -1, sizeof(z1)); memset(z2, -1, sizeof(z1)); memset(z, 0, sizeof(z)); for (int i=0; i>a >>b; int g = check(a,b); if (g>=1) cout<