题目

分析

首先每个数对\(2^i\)取模。也就是把每个数的第i位以后删去。

把它们放进树状数组里面。

那么当查询操作,

答案就位于区间\([2^i-x,2^{i-1}-1-x]\)中,直接查询就可以了。

细节很多,注意处理。

#include <cmath>
#include <iostream>
#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <algorithm>
#include <queue>
const long long maxlongint=2147483647;
const long long mo=1000000007;
const long long N=100005;
using namespace std;
long long tree[N*11][25];
long long a[N],n,q,mi[25];
int twobird(int x)
{
return x&(-x);
}
int insert(long long k,int j)
{
k++;
while(k<=mi[20])
{
tree[k][j]+=1;
k+=twobird(k);
}
}
int delete1(long long k,int j)
{
k++;
while(k<=mi[20])
{
tree[k][j]-=1;
k+=twobird(k);
}
}
int find(long long k,int j)
{
k++;
int sum=0;
while(k>=1)
{
sum+=tree[k][j];
k-=twobird(k);
}
return sum;
}
int main()
{
mi[0]=1;
for(int i=1;i<=22;i++) mi[i]=mi[i-1]*2;
scanf("%lld%lld",&n,&q);
for(long long i=1;i<=n;i++)
{
scanf("%lld",&a[i]);
for(int j=20;j>=0;j--) insert(a[i]%mi[j],j);
}
for(int i=1;i<=q;i++)
{
long long opt,x,y;
scanf("%lld%lld%lld",&opt,&x,&y);
if(opt==1)
{
for(int j=20;j>=0;j--) delete1(a[x]%mi[j],j);
a[x]=y;
for(int j=20;j>=0;j--) insert(a[x]%mi[j],j);
}
else
{
long long ans=0;
for(int j=20;j>=0;j--)
{
if(y-mi[j]>=0)
{
long long x1=((mi[j]-x)%mi[j+1]+mi[j+1])%mi[j+1],x2=((mi[j+1]-x-1)%mi[j+1]+mi[j+1])%mi[j+1];
if(x1<=x2)
ans+=(find(x2,j+1)-find(x1-1,j+1))*mi[j];
else
{
ans+=(find(mi[j+1]-1,j+1)-find(x1-1,j+1)+find(x2,j+1))*mi[j];
}
y-=mi[j];
}
}
printf("%lld\n",ans);
}
}
}

最新文章

  1. Mybatis学习总结(一)——入门基础
  2. 图解JVM的Class文件格式(详细版)
  3. Android开发使用TotalControl调试遇到的问题(备注)
  4. hdu 5105 求函数极值 函数求导/三分法
  5. java之redis篇(spring-data-redis整合)
  6. Android LayoutInflater&amp;LayoutInflaterCompat源码解析
  7. jQuery 判断checkbox是否被选中 4种方法
  8. Android在 普通类(非Activity,多数为Adapter) 中 传输数据为空值 解决方法 :在startActivity 用 intent传输数据
  9. Visio如何调整锁定图像大小
  10. vue 实践记录
  11. [swarthmore cs75] Lab 1 — OCaml Tree Programming
  12. .net core 微服务架构-docker的部署-包括网关服务(Ocelot)+认证服务(IdentityServer4)+应用服务(asp.net core web api)
  13. Nginx性能优化
  14. js 监听浏览器刷新还是关闭事件 - 转
  15. Java设计模式(18)策略模式(Strategy模式)
  16. js 删除节点,jquery遍历通过内容定位节点
  17. sqlserver创建同义词
  18. osx下查看jar文件
  19. ECharts学习总结(五):echarts的Option概览
  20. 解决Asp输出乱码问题

热门文章

  1. Fidder插件自动生成爬虫代码(C#)
  2. python 并发编程 多线程 目录
  3. 学习Linux第一周记
  4. linux 终端的用户与主机名
  5. python_操作MySQL 初解
  6. day 03 int bool str (索引,切片) for 循环
  7. $NOI$ $2019$ 网络同步赛
  8. git如何忽略特殊文件
  9. Vue组件通信方式(8种)
  10. 日语能力测试N1、N2级听力必备核心词汇—头发篇