sum

Sum

http://www.nowcoder.com/questionTerminal/e3fd1913640c4479b53076defdb0cb44

include

include

include

using namespace std;
#define ll long long
const int mod=1e9+7;
const int maxn=1e5+100;
int a[maxn],c[35][maxn];
int n,m;
void add(int q,int x,int k){
while(x<=n){
c[q][x]+=k;
x+=x&(-x);
}
}
int sum(int q,int x){
int ret=0;
while(x>0){
ret+=c[q][x];
x-=x&(-x);
}
return ret;
}
int query(int q,int x,int y){
return sum(q,y)-sum(q,x-1);
}
ll f(ll a,ll b){
ll res=1;
while(b){
if(b&1)res=ares%mod;
a=(a*a)%mod;
b>>=1;
}
return res%mod;
}
int main(){
scanf("%d",&n);
for(int i=1;i<=n;i++){
scanf("%d",&a[i]);
int temp=a[i],q=0;
while(temp){
if(temp&1)add(q,i,1);
temp>>=1;
q++;
}
}
scanf("%d",&m);
while(m--){
int num,x,y;
scanf("%d%d%d",&num,&x,&y);
if(num==1){
int temp=a[x],q=0;
while(temp){
if(temp&1)add(q,x,-1);
temp>>=1;
q++;
}
temp=y,q=0;
while(temp){
if(temp&1)add(q,x,1);
temp>>=1;
q++;
}
a[x]=y;
}else if(num==2){
ll ans=0;
for(int j=0;j<32;j++){
ans=(ans+(f(2,query(j,x,y))-1)%mod
(1<<j))%mod;
}
cout<<ans<<endl;
}
}
return 0;
}

全部评论

相关推荐

牛客92804383...:在他心里你已经是他的员工了
点赞 评论 收藏
分享
叶扰云倾:进度更新,现在阿里云面完3面了,感觉3面答得还行,基本都答上了,自己熟悉的地方也说的比较细致,但感觉面试官有点心不在焉不知道是不是不想要我了,求阿里收留,我直接秒到岗当阿里孝子,学校那边的房子都退租了,下学期都不回学校,全职猛猛实习半年。这种条件还不诱人吗难道 然后现在约到了字节的一面和淘天的复活赛,外加猿辅导。华为笔试完没动静。 美团那边之前投了个base广州的,把我流程卡麻了,应该是不怎么招人,我直接简历挂了,现在进了一个正常的后端流程,还在筛选,不知道还有没有hc。
点赞 评论 收藏
分享
不愿透露姓名的神秘牛友
07-03 18:13
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务