HDU_5057_分块
http://acm.hdu.edu.cn/showproblem.php?pid=5057
分块,保存每个块中每位对应数字的和,复杂的是getmum,左右下标所在的块不能直接读取block数组,要重新自己计算。
#include<iostream>
#include<cstring>
#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std; int a[],belong[],L[],R[],block[][][],n,m;
int ten[] = {,,,,,,,,,,}; void build()
{
int sizee = sqrt(n);
int num = n/sizee;
if(n%sizee) num++;
for(int i = ;i <= num;i++)
{
L[i] = (i-)*sizee+;
R[i] = i*sizee;
}
for(int i = ;i <= n;i++) belong[i] = (i-)/sizee+;
for(int i = ;i <= n;i++)
{
int temp = a[i];
for(int j = ;j <= ;j++)
{
block[belong[i]][j][temp%]++;
temp /= ;
}
}
} int getnum(int l,int r,int d,int p)
{
int ans = ;
if(belong[l] == belong[r])
{
for(int i = l;i <= r;i++)
{
if((a[i]/ten[d])% == p) ans++;
}
return ans;
} for(int i = belong[l]+;i < belong[r];i++) ans += block[i][d][p];
for(int i = l;i <= R[belong[l]];i++)
{
if((a[i]/ten[d])% == p) ans++;
}
for(int i = L[belong[r]];i <= r;i++)
{
if((a[i]/ten[d])% == p) ans++;
}
return ans;
} void update(int x,int y)
{
for(int i = ;i <= ;i++)
{
block[belong[x]][i][a[x]%]--;
a[x] /= ;
}
a[x] = y;
for(int i = ;i <= ;i++)
{
block[belong[x]][i][y%]++;
y /= ;
}
} int main()
{
int T;
scanf("%d",&T);
while(T--)
{
memset(block,,sizeof(block));
scanf("%d%d",&n,&m);
for(int i = ;i <= n;i++) scanf("%d",&a[i]);
build();
char s[];
while(m--)
{
scanf("%s",s);
if(s[] == 'S')
{
int x,y;
scanf("%d%d",&x,&y);
update(x,y);
}
else
{
int l,r,d,p;
scanf("%d%d%d%d",&l,&r,&d,&p);
printf("%d\n",getnum(l,r,d,p));
}
}
}
return ;
}
HDU_5057_分块的更多相关文章
- PHP搭建大文件切割分块上传功能
背景 在网站开发中,文件上传是很常见的一个功能.相信很多人都会遇到这种情况,想传一个文件上去,然后网页提示"该文件过大".因为一般情况下,我们都需要对上传的文件大小做限制,防止出现 ...
- POJ2104 K-th Number [分块做法]
传送:主席树做法http://www.cnblogs.com/candy99/p/6160704.html 做那倒带修改的主席树时就发现分块可以做,然后就试了试 思想和教主的魔法差不多,只不过那个是求 ...
- HDU 4467 分块
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4467 题意:给定n个点m条边的无向图,点被染色(黑0/白1),边带边权.然后q个询问.询问分为两种: ...
- 2016 ACM/ICPC Asia Regional Dalian Online 1010 Weak Pair dfs序+分块
Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)Total Submissio ...
- CC countari & 分块+FFT
题意: 求一个序列中顺序的长度为3的等差数列. SOL: 对于这种计数问题都是用个数的卷积来进行统计.然而对于这个题有顺序的限制,不好直接统计,于是竟然可以分块?惊为天人... 考虑分块以后的序列: ...
- bzoj2002弹(dan)飞绵羊 分块水过
据说是道lct求深度的题 但是在小猫大的指点下用分块就n^1.5水过了 = =数据忘记加强系列 代码极其不美观,原因是一开始是听小猫大讲的题意,还以为是弹到最前面... #include <cs ...
- C语言两种查找方式(分块查找,二分法)
二分法(必须要保证数据是有序排列的): 分块查找(数据有如下特点:块间有序,块内无序):
- [New Portal]Windows Azure Storage (14) 使用Azure Blob的PutBlock方法,实现文件的分块、离线上传
<Windows Azure Platform 系列文章目录> 相关内容 Windows Azure Platform (二十二) Windows Azure Storage Servic ...
- BZOJ 3343: 教主的魔法 [分块]【学习笔记】
3343: 教主的魔法 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 1172 Solved: 526[Submit][Status][Discus ...
随机推荐
- 用实例理解设计模式——代理模式(Python版)
代理模式:为其他对象提供一种代理以控制对这个对象的访问. 在某些情况下,一个对象不适合或者不能直接引用另一个对象,而代理对象可以在客户端和目标对象之间起到中介的作用. 代理模式分为: 静态代理 动态代 ...
- 小小知识点(三十八)MPSK和MQAM调制的实现——利用IQ调制
IQ调制的原理 (一)调制基本原理 (二)调制基本原理 利用IQ调制实现MPSK(QPSK 8PSK BPSK)和MQAM(16QAM 64QAM)调制 (一)利用IQ调制实现QPSK调制 ...
- Linux 学习笔记 6 搭建nginx 实现二级域名访问
前言 在前一节的内容里面,我们学习了如何使用yum 包管理工具来安装我们需要的软件,这节内容,通过搭建Nginx 反向代理服务器,以及学习服务的配置等内容. NGINX Nginx是一款轻量级的Web ...
- php改变时间的方法
1. strtotime date("Y-m-d",strtotime('+1day')) 2. mktime date("Y-m-d",mktime(0,0, ...
- 简单的c语言程序
我猜大部分人第一门掌握的语言是c语言吧(我第一门学的是python). 在接下来的文章里我会逐步的介绍有关自己对c语言的理解,希望对一些小伙伴有帮助,有哪里有错误希望大佬指出. 首先这是第一个c语言程 ...
- 一个动态扩展表格控件列和行的 jQuery 插件
一个动态扩展表格控件列和行的 jQuery 插件 不过这并不影响使用鸭! 看这里:https://github.com/zhuwansu/table-ext.js 一个简单的示范 html <t ...
- 与drawable的较量(一)
前言 在android ui中drawable 是一个非常关键的要点,因为我们现在使用的花里胡哨的APP,都在胡里花哨的drawable 构建的. drawable,英文翻译为可拖拽的.说白了就是自己 ...
- cf - 01串的问题
One beautiful July morning a terrible thing happened in Mainframe: a mean virus Megabyte somehow got ...
- vue学习笔记1:el 与 data
一.vue介绍 vue是目前三大主流框架之一(React.Angular.Vue) vue特点: 易用 灵活 高效 vue官网:官网链接 二,知识点 vue实例选项: el 注:不能 让el直接管理h ...
- kafka 中 zookeeper 具体是做什么的?
zookeeper 是 kafka 不可分割的一部分,可见其重要程度,所以我们有必要了解一下 zookeeper 在 kafka 中的具体工作内容. 而且,这也是面试时经常问的. zookeeper ...