分块,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 ;
}

【分块】hdu5057 Argestes and Sequence的更多相关文章

  1. hdu5057 Argestes and Sequence 分块

    Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepted Submiss ...

  2. hdu 5057 Argestes and Sequence(分块算法)

    Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  3. hdu 5057 Argestes and Sequence

    Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  4. HDU 5057 Argestes and Sequence --树状数组(卡内存)

    题意:给n个数字,每次两种操作: 1.修改第x个数字为y. 2.查询[L,R]区间内第D位为P的数有多少个. 解法:这题当时被卡内存了,后来看了下别人代码发现可以用unsigned short神奇卡过 ...

  5. 【HDOJ】5057 Argestes and Sequence

    树状数组,其实很简单.只是MLE. #include <iostream> #include <cstdio> #include <cstring> using n ...

  6. hdu 5057 Argestes and Sequence (数状数组+离线处理)

    题意: 给N个数.a[1]....a[N]. M种操作: S X Y:令a[X]=Y Q L R D P:查询a[L]...a[R]中满足第D位上数字为P的数的个数 数据范围: 1<=T< ...

  7. HDU5057(分块)

    Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Ot ...

  8. BestCoder Round #11 (Div. 2) 题解

    HDOJ5054 Alice and Bob Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/O ...

  9. BestCoder Round #11 题解集合

    1001.Alice and Bob 签到题*1,只要x * 2 == n && y * 2 == m就满足条件. var m, n, x, y : int64; begin whil ...

随机推荐

  1. oracleLinux7上安装oracle11g r2(脚本简单配置环境)

    一 环境脚本简单配置 #!/bin/bashmv /etc/yum.repos.d/* /tmpmv iso.repo /etc/yum.repos.d/tar zxvf a.tar.gzmv 7Se ...

  2. JS表单验证优化

    var validate = (function(){ var messages = { isEmail : '输入正确格式邮箱', isPhoneNum : '输入正确手机号' }; var val ...

  3. 【BZOJ】1725: [Usaco2006 Nov]Corn Fields牧场的安排

    [算法]状压DP [题解]对于上一行的每个状态,每行进行DFS. #include<cstdio> #include<algorithm> #include<cstrin ...

  4. apache工作模式

    查看当前apache的工作模式 apachectl -l prefork模式 <IfModule prefork.c>StartServers 5MinSpareServers 5MaxS ...

  5. Runtime类 调用windows程序。

    import java.io.*; public class webcyz { /** * @param args */ public static void main(String[] args) ...

  6. mysql五-1:单表查询

    一 介绍 本节内容: 查询语法 关键字的执行优先级 简单查询 单条件查询:WHERE 分组查询:GROUP BY HAVING 查询排序:ORDER BY 限制查询的记录数:LIMIT 使用聚合函数查 ...

  7. POJ1080(LCS变形)

    Human Gene Functions Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Oth ...

  8. 【转】cve2014-3153 漏洞之详细分析与利用

    背景学习: Linux Futex的设计与实现 使用者角度看bionic pthread_mutex和linux futex实现 By kernux TopSec α-lab 一 漏洞概述 这个漏洞是 ...

  9. Tarjan 联通图 Kuangbin 带你飞 联通图题目及部分联通图题目

    Tarjan算法就不说了 想学看这 https://www.byvoid.com/blog/scc-tarjan/ https://www.byvoid.com/blog/biconnect/ 下面是 ...

  10. JQ子页面对父页面的元素进行操作

    需要加上parent.document,才能找到父页面的元素 如: $("#tabs", parent.document).click();