记录编号 567882 评测结果 AAAAAAAAAA
题目名称 人工湖 最终得分 100
用户昵称 Gravatar遥时_彼方 是否通过 通过
代码语言 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;
}