传送门
一道蛋疼的线段树。
发现m很小,于是我们按照横坐标建线段树。然后用并查集维护上下2*m个节点的连通性。
然后这题略卡内存。
#include<cstring>
#include<cmath>
#include<cstdio>
#include<iostream>
#include<cstdlib>
#include<algorithm>
#define N 100005
using namespace std;
char ch[10];
int n,m,mp[N][10],x,y,f[30],tag[30],v[30],q;
int get(int x){
return f[x]==x?x:f[x]=get(f[x]);}
struct node{
int f[14],tag[14],l,r,sum;
int get(int x){
return x==f[x]?x:f[x]=get(f[x]);}
void make(){
int p=l;
sum=0;
for (int i=1;i<=2*m;i++) f[i]=i,tag[i]=0;
for (int i=1;i<=m;i++)
if (mp[p][i]==4) tag[i]=1,sum++;
for (int i=1;i<=m;i++)
if (mp[p][i]>1){
if (i!=1&&mp[p][i-1]>1){
int x