社区讨论
分块WA10pts求调
P3870[TJOI2009] 开关参与者 3已保存回复 4
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 4 条
- 当前快照
- 1 份
- 快照标识符
- @lo10py5d
- 此快照首次捕获于
- 2023/10/22 13:18 2 年前
- 此快照最后确认于
- 2023/11/02 12:47 2 年前
写吐了,大佬帮忙造一组hack数据也行
CPP#include <bits/stdc++.h>
using namespace std;
int n,m,opt,L,R;
const int N=1e5+10;
bool a[N],yh[N];
int fk[N],ans[N],len,ret;
int main()
{
ios::sync_with_stdio(0);
cin.tie(NULL);
cout.tie(NULL);
cin>>n>>m;
len=sqrt(n);
for(int i=1;i<=n;i++)
fk[i]=ceil(1.0*i/len);
while(m--)
{
cin>>opt>>L>>R;
if(opt==0)
{
if(fk[L]==fk[R])
{
for(int i=L;i<=R;i++)
{
a[i]=!a[i];
if(a[i]) ans[fk[L]]++;
else ans[fk[L]]--;
}
}
else
{
for(int i=L;fk[i]==fk[L];i++)
{
a[i]=!a[i];
if(a[i]) ans[fk[L]]++;
else ans[fk[L]]--;
}
for(int i=fk[L]+1;i<fk[R];i++)
ans[i]=len-ans[i],yh[i]=!yh[i];
for(int i=R;fk[i]==fk[R];i--)
{
a[i]=!a[i];
if(a[i]) ans[fk[R]]++;
else ans[fk[R]]--;
}
}
}
else
{
ret=0;
if(fk[L]==fk[R])
{
for(int i=L;i<=R;i++)
ret+=a[i]^yh[fk[L]];
}
else
{
for(int i=L;fk[i]==fk[L];i++)
ret+=(int)(a[i]^yh[fk[L]]);
for(int i=fk[L]+1;i<fk[R];i++)
ret+=ans[i];
for(int i=R;fk[i]==fk[R];i--)
ret+=(int)(a[i]^yh[fk[R]]);
}
cout<<ret<<'\n';
}
}
return 0;
}
回复
共 4 条回复,欢迎继续交流。
正在加载回复...