| 记录编号 | 
    567882 | 
    评测结果 | 
    AAAAAAAAAA | 
    | 题目名称 | 
    人工湖 | 
    最终得分 | 
    100 | 
    
    | 用户昵称 | 
     遥时_彼方 | 
    是否通过 | 
    通过 | 
    | 代码语言 | 
    C++ | 
    运行时间 | 
    0.005 s  | 
    | 提交时间 | 
    2021-12-10 13:03:07 | 
    内存使用 | 
    1.95 MiB  | 
显示代码纯文本
#include<bits/stdc++.h>
#define ll long long
using namespace std;
char ra;
inline void read(int &x)
{
	x&=0;
	ra=getchar();
	while(ra<'0'||ra>'9') ra=getchar();
	while(ra>='0'&&ra<='9') 
	{
		x=(x<<3)+(x<<1)+(ra^48);
		ra=getchar();
	}
} 
inline void write(int x)
{
	if(x/10) write(x/10);
	putchar(x%10+48);
}
///////////
const int N=100100;
int nc,mc;//nc为道路数 
int n[N];//每条道路状态 
int sp;
int nl;//共有几条坏的路 
int f[N];
int lowbit(int x){return x&(-x);}
void ADD(int cl,int x)
{
    if(!x) x=-1;
    nl+=x;
    while(cl<=nc)
    {
    	f[cl]+=x;
    	cl+=lowbit(cl);
	}
	return;
}
int FIND(int cl)
{
	int re=0;
	while(cl)
	{
		re+=f[cl];
		cl-=lowbit(cl);
	}
	return re;
}
int main()
{
	freopen("lakee.in","r",stdin);
	freopen("lakee.out","w",stdout);
    read(nc);//读入城市数 
    nc-=1;//处理为道路数 
    read(mc);
//    cout<<"P1:"<<nc<<" "<<mc<<endl;
    int s1,s2,s3;
    for(int i=1;i<=mc;i++)
    {
    	read(s1);
    	read(s2);
    	read(s3);
    	if(s2<s3) swap(s2,s3);
    	s2--;
    	if(s1)
    	{
    		s1=FIND(s2)-FIND(s3-1);
    		if(s1&&nl-s1) printf("NO\n");
    		else printf("YES\n");
		}
		else 
		{
			if(s3==1&&s2==nc)
			{
				nl-=(sp<<1);
				nl++;
				sp^=1;
				continue;
			}
			n[s3]^=1;
			ADD(s3,n[s3]);
		}
	}
	return 0;
}