題目鏈結
線段樹裸題,但是由於是開平方根,所以只能暴力單點修改
但是,光這麼做會t,當單點值為0或1是就不會變了。
於是可以給區間打上標記,有標記就不遞迴下去修改了。ac
#include#include#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define rre(i,r,l) for(int i=(r);i>=(l);i--)
#define re(i,l,r) for(int i=(l);i<=(r);i++)
#define clear(a,b) memset(a,b,sizeof(a))
#define inout(x) printf("%d",(x))
#define douin(x) scanf("%lf",&x)
#define strin(x) scanf("%s",(x))
#define llin(x) scanf("%lld",&x)
#define op operator
#define csc maintypedef unsigned
long
long
ull;
typedef
const
intcint;
typedef
long
long
ll;using
namespace
std;
void inin(int &ret)
while(ch>='
0'&&ch<='
9')ret*=10,ret+=ch-'
0',ch=getchar();
ret=f?-ret:ret;
}ll sum[
400010
];int l[400010],n,m,r[400010],bo[400040
];ll a[
100010
];void build(int k,int ll,int
rr)
int mid=(ll+rr)>>1
; build(k
<<1
,ll,mid);
build(k
<<1|1,mid+1
,rr);
sum[k]=sum[k<<1]+sum[k<<1|1],bo[k]=bo[k<<1]&bo[k<<1|1];}
ll query(
int k,int ll,int
rr)void change(int k,int ll,int
rr)
int mid=(l[k]+r[k])>>1
;
if(rr<=mid)change(k<<1
,ll,rr);
else
if(ll>mid)change(k<<1|1
,ll,rr);
else change(k<<1,ll,rr),change(k<<1|1
,ll,rr);
sum[k]=sum[k<<1]+sum[k<<1|1],bo[k]=bo[k<<1]&bo[k<<1|1];}
intcsc()
return0;
}
bzoj 3038 上帝造題的七分鐘2
time limit 3 sec memory limit 128 mb submit 923 solved 413 submit status discuss xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於...
BZOJ 3038 上帝造題的七分鐘2
description xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要是noip...
bzoj3038 上帝造題的七分鐘2
description xlk覺得 上帝造題的七分鐘 不太過癮,於是有了第二部。第一分鐘,x說,要有數列,於是便給定了乙個正整數數列。第二分鐘,l說,要能修改,於是便有了對一段數中每個數都開平方 下取整 的操作。第三分鐘,k說,要能查詢,於是便有了求一段數的和的操作。第四分鐘,彩虹喵說,要是noip...