题意:给n个数字,每次两种操作: 1.修改第x个数字为y。 2.查询[L,R]区间内第D位为P的数有多少个。

解法:这题当时被卡内存了,后来看了下别人代码发现可以用unsigned short神奇卡过,于是学习了。

这种区间求和的问题很容易想到树状数组,根据第i位为j(i<10,j<10)建立100棵树状数组(由于内存100*100000被卡,且看到个数,即c[10][10][100000]的值最多为100000,那么最多分两个unsigned short (0~65535),记录一下就可以了)。 然后两种操作都非常常规,就不讲了。

限时2500ms,结果跑了2250MS,限内存32768K,结果内存30008K,纯粹是卡过去的。

好像正解是离线算法或者分块,但是不会写,以后会写了再更新吧。

代码:

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <cmath>
#include <algorithm>
using namespace std;
#define N 100003 unsigned short c[][][N];
bool f[][][N];
int n,m;
int a[N];
int ten[] = {,,,,,,,,,}; int lowbit(int x) { return x&-x; } void modify(int D,int P,int x,int val)
{
while(x <= n)
{
c[D][P][x] += val;
if(c[D][P][x] > ) c[D][P][x] -= , f[D][P][x] = ;
x += lowbit(x);
}
} int getsum(int D,int P,int x)
{
int res = ;
while(x > )
{
res += c[D][P][x];
if(f[D][P][x]) res += ;
x -= lowbit(x);
}
return res;
} int main()
{
int i,j,t;
char ss[];
int x,y,L,R,D,P;
scanf("%d",&t);
while(t--)
{
scanf("%d%d",&n,&m);
memset(c,,sizeof(c));
memset(f,,sizeof(f));
for(i=;i<=n;i++)
{
scanf("%d",&a[i]);
for(j=;j<;j++)
{
int num = a[i]/ten[j];
num %= ;
modify(j,num,i,);
}
}
while(m--)
{
scanf("%s",ss);
if(ss[] == 'Q')
{
scanf("%d%d%d%d",&L,&R,&D,&P);
D--;
printf("%d\n",getsum(D,P,R) - getsum(D,P,L-));
}
else
{
scanf("%d%d",&x,&y);
for(i=;i<;i++)
{
int num = a[x]/ten[i];
num %= ;
modify(i,num,x,-);
}
for(i=;i<;i++)
{
int num = y/ten[i];
num %= ;
modify(i,num,x,);
}
a[x] = y;
}
}
}
return ;
}

最新文章

  1. The user specified as a definer (&#39;root&#39;@&#39;%&#39;) does not exist 异常解决
  2. ScrollView嵌套RecyclerView时滑动出现的卡顿
  3. Oracle常用
  4. smartjs - DataManager 场景示例分析 - 数据懒加载
  5. String Reduction
  6. ZOJ 1642 Match for Bonus (DP)
  7. Robot Motion
  8. 用Owin Host实现脱离IIS跑Web API单元测试
  9. Java知识补充
  10. TODO:小程序的使用体验
  11. Hibernate 中对象关系映射(ObjectRelationMapping)
  12. EduSoho程序上线实录
  13. ML01 机器学习后利用混淆矩阵Confusion matrix 进行结果分析
  14. jQuery常见案例
  15. python基础——高级特性
  16. springboot 中打印 sql 语句
  17. ES6解构赋值的应用场景
  18. 【大数据系列】hadoop集群的配置
  19. Python基础--数据类型
  20. 获取iframe内的元素

热门文章

  1. 启动Tomcat出现“Bad version number in .class file (unable to load class XXX)”解决
  2. NYOJ 42 一笔画问题
  3. HTML &#183; 图片热点,网页划区,拼接,表单
  4. 从网络中获取图片显示到Image控件并保存到磁盘
  5. javascript函数中的三个技巧【一】
  6. Python基础(3)--列表和元组
  7. 干货-iOS、mac开源项目及库,以后我也会持续更新。
  8. ReactiveCocoa之UI篇
  9. [独孤九剑]持续集成实践(二)– MSBuild语法入门
  10. nginx安装过程,报错处理:make[1]: *** [objs/addon/src/bson.o] Error 1