题意略。

开始想开一个三维的树状数组,但是一算空间不够,正解是离线操作,按位来计算,一共是10位,所以总共是扫10遍,第i遍只处理第i位的询问,

注意在修改后,要把当前这个位的值存下来(这就是cur数组的作用)!

#include<bits/stdc++.h>
#define maxn 100005
using namespace std; struct op{
int kind,l,r,d,p,x,y;
}; int BIT[][maxn];
int a[maxn],T,N,M,tens[],cur[maxn];
int ans[maxn];
char comd[];
op store[maxn]; int lowbit(int k){
return k & -k;
}
void add(int digit,int pos,int val){
while(pos <= N){
BIT[digit][pos] += val;
pos += lowbit(pos);
}
}
int sum(int digit,int pos){
int ret = ;
while(pos > ){
ret += BIT[digit][pos];
pos -= lowbit(pos);
}
return ret;
} int main(){
tens[] = ;
for(int i = ;i < ;++i) tens[i] = tens[i - ] * ;
scanf("%d",&T);
while(T--){
scanf("%d%d",&N,&M);
memset(ans,-,sizeof(ans));
for(int i = ;i <= N;++i) scanf("%d",&a[i]);
for(int i = ;i < M;++i){
scanf("%s",comd);
if(comd[] == 'Q'){
store[i].kind = ;
scanf("%d%d%d%d",&store[i].l,&store[i].r,&store[i].d,&store[i].p);
}
else{
store[i].kind = ;
scanf("%d%d",&store[i].x,&store[i].y);
}
}
for(int i = ;i <= ;++i){
memset(BIT,,sizeof(BIT));
for(int j = ;j <= N;++j){
add(a[j] % ,j,);
cur[j] = a[j] % ;
}
for(int j = ;j < M;++j){
//printf("------\n");
if(store[j].kind == && store[j].d == i){
ans[j] = sum(store[j].p,store[j].r) - sum(store[j].p,store[j].l - );
}
else if(store[j].kind == ){
int x = store[j].x,y = store[j].y;
add(cur[x],x,-);
add((y / tens[i - ]) % ,x,);
cur[x] = (y / tens[i - ]) % ;
}
}
for(int j = ;j <= N;++j) a[j] /= ;
}
for(int i = ;i < M;++i){
if(ans[i] == -) continue;
printf("%d\n",ans[i]);
}
}
return ;
} /*
3
7 7
101 123 132 456 78 9 1001
Q 1 4 3 4
Q 1 7 2 0
S 1 401
Q 1 4 3 4
Q 1 7 1 1
S 6 999
Q 1 7 3 1 5 7
10 11 12 13 14
Q 1 5 2 1
Q 1 5 1 0
Q 1 5 1 1
Q 1 5 3 0
Q 1 5 3 1
S 1 100
Q 1 5 3 1 6 5
2147483647 2147483647 2147483647 2147483647 2147483647 2147483647
Q 1 5 1 7
Q 2 6 10 2
S 6 0
Q 1 7 1 0
Q 1 7 2 0
*/

HDU 5057的更多相关文章

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

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

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

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

  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个数.a[1]....a[N]. M种操作: S X Y:令a[X]=Y Q L R D P:查询a[L]...a[R]中满足第D位上数字为P的数的个数 数据范围: 1<=T< ...

  5. [kmp+dp] hdu 4628 Pieces

    题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=4622 Reincarnation Time Limit: 6000/3000 MS (Java/Ot ...

  6. hdu 5055(坑)

    题目链接:http://acm.hdu.edu.cn/showproblem.php? pid=5055 Bob and math problem Time Limit: 2000/1000 MS ( ...

  7. HDOJ 2111. Saving HDU 贪心 结构体排序

    Saving HDU Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total ...

  8. 【HDU 3037】Saving Beans Lucas定理模板

    http://acm.hdu.edu.cn/showproblem.php?pid=3037 Lucas定理模板. 现在才写,noip滚粗前兆QAQ #include<cstdio> #i ...

  9. hdu 4859 海岸线 Bestcoder Round 1

    http://acm.hdu.edu.cn/showproblem.php?pid=4859 题目大意: 在一个矩形周围都是海,这个矩形中有陆地,深海和浅海.浅海是可以填成陆地的. 求最多有多少条方格 ...

随机推荐

  1. jsp定义全局变量:读取properties文件

    <%java.util.Properties prop = new java.util.Properties();java.io.InputStream in;in = getClass().g ...

  2. golang从context源码领悟接口的设计

    注:写帖子时go的版本是1.12.7 go语言中实现一个interface不用像其他语言一样需要显示的声明实现接口.go语言只要实现了某interface的方法就可以做类型转换.go语言没有继承的概念 ...

  3. activiti工作流委托功能的设计和实现

    最近公司开发一个项目,客户提出了一个需求,用户在出差的时候,可以将自己的工作进行委托.可以指定委托时间.委托工作内容.指定委托人等等内容. 然后我就上网查询资料,发现activiti工作流本身并不支持 ...

  4. 【iOS】containsString iOS7 报错

    前几天发现了这个问题,原来是因为 containsString 只支持 iOS8.0 以后的系统,不支持 7... 有些地方可以用其他方法替代,如下: NSString *urlString = [[ ...

  5. 【Android】error: Error retrieving parent for item: No resource found that matches the given name 'Theme.Sherlock.Light.NoActionBar'.

    问题: res 文件夹下的 values 下的 styles.xml <style name="Sherlock.Light.NoActionBar" parent=&quo ...

  6. HttpsUtils

    package io.renren.modules.jqr.util; import java.io.BufferedReader; import java.io.InputStream; impor ...

  7. Oracle中ROWNUM伪列和ROWID伪列的用法与区别

    做过Oracle分页的人都知道由于Oracle中没有像MySql中limit函数以及SQLServer中的top关键字等,所以只能通过伪列的方式去满足分页功能,在此,不谈分页方法,只从根本上去介绍这两 ...

  8. 多态、继承、this、super

    先放一下多态的定义: (360词典上的哈) 多态(Polymorphism)按字面的意思就是"多种状态".在面向对象语言中,接口的多种不同的实现方式即为多态.引用Charlie C ...

  9. python对常见数据类型的遍历

    本文将通过for ... in ...的语法结构,遍历字符串.列表.元组.字典等数据结构. 字符串遍历 >>> a_str = "hello itcast" &g ...

  10. 心里想的VS嘴上说的

    心里想的VS嘴上说的 背景:昨天开会,在招行总行那边,今天检讨下自己不会说话,真是太难了我! 一.昨日重现 现在回想起当时的场景觉得自己也真是搞笑,这都没死,太难了我.昨天下午在五楼开会,这也是我入职 ...