社区讨论
玄学...玄关...
P2574XOR的艺术参与者 1已保存回复 0
讨论操作
快速查看讨论及其快照的属性,并进行相关操作。
- 当前回复
- 0 条
- 当前快照
- 1 份
- 快照标识符
- @lpjlrl2k
- 此快照首次捕获于
- 2023/11/29 18:07 2 年前
- 此快照最后确认于
- 2023/11/29 20:36 2 年前
洛谷IDE和本地评测都过了,但评测不给过?
CPP#include<bits/stdc++.h>
#define lo (nw<<1)
#define ro (nw<<1|1)
#define md ((l+r)>>1)
#define int long long
using namespace std;
inline int read()
{
int x=0,f=1;
char ch=getchar();
while(!isdigit(ch))
{
if(ch=='-')
f=-1;
ch=getchar();
}
while(isdigit(ch))
x=(x<<1)+(x<<3)+(ch^48),
ch=getchar();
return x*f;
}
inline void write(int n)
{
if(n<0)
n=-n,
putchar('-');
if(n>=10)
write(n/10);
putchar(n%10+'0');
return ;
}
const int N=200010;
int n,m;
int a[N];
struct node
{
int sm,sz,ch;
}t[N<<3];
struct segment_tree
{
void upd(int nw)
{
t[nw].sm=t[lo].sm+t[ro].sm;
t[nw].sz=t[lo].sz+t[ro].sz;
return ;
}
void mkch(int nw)
{
t[nw].ch=1;
t[nw].sm=t[nw].sz-t[nw].sm;
return ;
}
void psd(int nw)
{
if(t[nw].ch)
{
mkch(lo);
mkch(ro);
t[nw].ch=0;
}
return ;
}
void bld(int nw,int l,int r)
{
if(l==r)
{
t[nw].sm=a[l];
t[nw].sz=1;
return;
}
bld(lo,l,md);
bld(ro,md+1,r);
upd(nw);
return ;
}
void atr(int nw,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
mkch(nw);
return ;
}
psd(nw);
if(x<=md)
atr(lo,l,md,x,y);
if(y>md)
atr(ro,md+1,r,x,y);
upd(nw);
return ;
}
int qry(int nw,int l,int r,int x,int y)
{
if(x<=l&&r<=y)
{
return t[nw].sm;
}
psd(nw);
int sm=0;
if(x<=md)
sm+=qry(lo,l,md,x,y);
if(y>md)
sm+=qry(ro,md+1,r,x,y);
return sm;
}
}ST;
signed main()
{
freopen("nm.out","w",stdout);
n=read(),m=read();
for(int i=1;i<=n;i++)
a[i]=getchar()-'0';
getchar();
ST.bld(1,1,n);
while(m--)
{
int op=read(),l=read(),r=read();
if(op==0)
{
ST.atr(1,1,n,l,r);
}
if(op==1)
{
printf("%lld\n",ST.qry(1,1,n,l,r));
// write(ST.qry(1,1,n,l,r));
// putchar('\n');
}
}
return 0;
}
数据:
CPPinput:
10 5
1001010110
1 2 3
0 6 9
1 7 10
1 2 5
1 2 7
output:
0
1
1
2
回复
共 0 条回复,欢迎继续交流。
正在加载回复...