分块,v[i][j][k]表示第i块内第j位是k的元素数。非常好写。注意初始化

要注意题意,①第i位是从右往左算的。

②若x没有第i位,则用前导零补齐10位。比如103---->0000000103。

 #include<cstdio>
#include<cmath>
#include<cstring>
using namespace std;
const int MOD[]={,,,,,,,,,};
int T,n,m,ql,qr,x,y,a[],l[],r[],v[][][],sz,num[],sum;
char op[];
inline int Bit(const int &x,const int &p) {return (x/MOD[p-])%;}
void makeblock()
{
memset(v,,sizeof(v));
sz=sqrt(n); sum=;
for(sum=;sum*sz<n;sum++)
{
l[sum]=(sum-)*sz+;
r[sum]=sum*sz;
for(int i=l[sum];i<=r[sum];i++)
{
int t=a[i],cnt=;
while(t) {v[sum][++cnt][t%]++; t/=;}
for(cnt++;cnt<=;cnt++) v[sum][cnt][]++;
num[i]=sum;
}
}
l[sum]=sz*(sum-)+; r[sum]=n;
for(int i=l[sum];i<=r[sum];i++)
{
int t=a[i],cnt=;
while(t) {v[sum][++cnt][t%]++; t/=;}
for(cnt++;cnt<=;cnt++) v[sum][cnt][]++;
num[i]=sum;
}
}
inline void query()
{
int ans=;
if(num[ql]+>=num[qr]) {for(int i=ql;i<=qr;i++) if(Bit(a[i],x)==y) ans++;}
else
{
for(int i=ql;i<=r[num[ql]];i++) if(Bit(a[i],x)==y) ans++;
for(int i=l[num[qr]];i<=qr;i++) if(Bit(a[i],x)==y) ans++;
for(int i=num[ql]+;i<num[qr];i++) ans+=v[i][x][y];
}
printf("%d\n",ans);
}
void update()
{
int cnt=;
while(a[x]) {v[num[x]][++cnt][a[x]%]--; a[x]/=;}
for(cnt++;cnt<=;cnt++) v[num[x]][cnt][]--;
int t=y; a[x]=y; cnt=;
while(t) {v[num[x]][++cnt][t%]++; t/=;}
for(cnt++;cnt<=;cnt++) v[num[x]][cnt][]++;
}
int main()
{
scanf("%d",&T);
for(;T>;T--)
{
scanf("%d%d",&n,&m);
for(int i=;i<=n;i++) scanf("%d",&a[i]);
makeblock();
for(int i=;i<=m;i++)
{
scanf("%s",op);
if(op[]=='Q') {scanf("%d%d%d%d",&ql,&qr,&x,&y); query();}
else {scanf("%d%d",&x,&y); update();}
}
}
return ;
}

最新文章

  1. 弹框控件 UIAlertView UIActionSheet
  2. 百度编辑器ueditor插入表格没有边框,没有颜色的解决方法 2015-01-06 09:24 98人阅读 评论(0) 收藏
  3. Put your application in production
  4. 自然语言20.1 WordNet介绍和使用 _
  5. PHP将XML转成数组
  6. 【原】iOS动态性(一):动态添加属性的方法——关联(e.g. 向Category添加属性)
  7. 提高PHP性能的实用方法+40个技巧优化您的PHP代码
  8. Apache http强制转为https页面访问(转)
  9. QT小记之在VS2005中使用(设置QMAKESPEC环境变量,以及编译QT Lib)
  10. LSTM模型与前向反向传播算法
  11. ASP.Net Core Razor 页面路由
  12. Webpack的基本配置
  13. ImageMagick 使用经验
  14. 分布式事务2PC_PENDING异常处理
  15. ValueError: Variable rnn/basic_lstm_cell/kernel already exists, disallowed. Did you mean to set reuse=True or reuse=tf.AUTO_REUSE in VarScope? Originally defined at:
  16. PYTHON -- 基础3
  17. Java tomcat Several ports (8005, 8080, 8009) required by Tomcat v9.0 Server at localhost
  18. 让Linux系统开机速度更快的方法
  19. 【洛谷P1896【SCOI2005】】互不侵犯King
  20. BZOJ3551 [ONTAK2010]Peaks加强版 kruskal 并查集 主席树 dfs序

热门文章

  1. watch用法小记
  2. JSOI2008 星球大战 [并查集]
  3. oracle与mysql与sqlserver的分页
  4. Pycharm 创建 Django admin 用户名和密码
  5. php文件上传错误代码
  6. kubernetes 参考资料
  7. DOM常用对象
  8. [BZOJ2453]维护队列|分块
  9. 在Unity(C#)下实现Lazy Theta*寻路
  10. 【洛谷 P4289】[HAOI2008]移动玩具(搜索)