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<= 50
1<=N, M<=100000
0<=a[i]<=$2^{31}$ - 1
1<=X<=N
0<=Y<=$2^{31}$ - 1
1<=L<=R<=N
1<=D<=10
0<=P<=9
思路:
直接开tree[maxn][10][10]记录第i位上数字为j的个数,铁定MLE,采用离线省去一维。
枚举位置(第i位),每一次枚举,扫一下M个操作,记录。
额.. 直接看代码
代码:
#include <cstdio>
#include <iostream>
#include <string.h>
#include <cstdlib>
#include <algorithm>
#include <queue>
#include <vector>
#include <cmath>
#include <map>
#include <stack>
using namespace std;
int const uu[4] = {1,-1,0,0};
int const vv[4] = {0,0,1,-1};
typedef long long ll;
int const inf = 0x3f3f3f3f;
ll const INF = 0x7fffffffffffffffll;
double eps = 1e-10;
double pi = acos(-1.0);
#define rep(i,s,n) for(int i=(s);i<=(n);++i)
#define rep2(i,s,n) for(int i=(s);i>=(n);--i)
#define mem(v,n) memset(v,(n),sizeof(v))
#define lson l, m, rt<<1
#define rson m+1, r, rt<<1|1
#define lowbit(x) (x)&(-(x))
struct node1{
int kind, L, R, D, P, pos, value; //kind=0,Q操作 kind=1,S操作
}O[100005]; int const maxn=100005;
int T,n,m;
int a[maxn], aa[maxn];
int C[maxn][10]; //第二维:位上的数字
int ans[maxn]; void update(int kind,int p,int x){ //x:位上的数字
for(int i=p;i<=n;i+=lowbit(i)){
if(kind==0)
++C[i][x];
else
--C[i][x];
}
} int sum(int p,int P){
int ret=0;
for(int i=p;i>0;i-=lowbit(i))
ret+=C[i][P];
return ret;
} int query(int L,int R,int P){
return sum(R,P)-sum(L-1,P);
} int POW(int base,int k){
int ret=1;
while(k--) ret*=10;
return ret;
} int main(){
cin>>T;
while(T--){
scanf("%d%d",&n,&m); rep(i,1,n){
scanf("%d",&a[i]);
aa[i]=a[i];
} char op[10];
rep(kk,1,m){
scanf("%s",op);
int x,y,L,R,D,P;
if(op[0]=='S'){
scanf("%d%d",&x,&y);
O[kk].kind=1, O[kk].pos=x, O[kk].value=y;
}else{
scanf("%d%d%d%d",&L,&R,&D,&P);
O[kk].kind=0, O[kk].L=L, O[kk].R=R, O[kk].D=D, O[kk].P=P;
}
} rep(i,1,10){// 第i位
mem(C,0);
rep(j,1,n){
a[j]=aa[j];
int t1=a[j]/POW(10,i-1)%10; //第i位上的数字
update(0,j,t1);
}
rep(j,1,m){
if(O[j].kind==1){ //更改操作
int t1=a[O[j].pos]/POW(10,i-1)%10;
update(1, O[j].pos, t1);
int t2=O[j].value/POW(10,i-1)%10;
update(0, O[j].pos, t2);
a[O[j].pos]=O[j].value;
}else{
if(O[j].D==i){ //查询操作
ans[j]=query(O[j].L,O[j].R,O[j].P);
}
}
}
}
rep(i,1,m) if(O[i].kind==0) printf("%d\n",ans[i]);
}
return 0;
}
hdu 5057 Argestes and Sequence (数状数组+离线处理)的更多相关文章
- HDU 5057 Argestes and Sequence --树状数组(卡内存)
题意:给n个数字,每次两种操作: 1.修改第x个数字为y. 2.查询[L,R]区间内第D位为P的数有多少个. 解法:这题当时被卡内存了,后来看了下别人代码发现可以用unsigned short神奇卡过 ...
- HDU 1166 敌兵布阵 (数状数组,或线段树)
题意:... 析:可以直接用数状数组进行模拟,也可以用线段树. 代码如下: #pragma comment(linker, "/STACK:1024000000,1024000000&quo ...
- Necklace HDU - 3874 (线段树/树状数组 + 离线处理)
Necklace HDU - 3874 Mery has a beautiful necklace. The necklace is made up of N magic balls. Each b ...
- hdu 5057 Argestes and Sequence
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 2492 Ping pong (数状数组)
Ping pong Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others)Total S ...
- HDU 4893 Wow! Such Sequence! (树状数组)
题意:给有三种操作,一种是 1 k d,把第 k 个数加d,第二种是2 l r,查询区间 l, r的和,第三种是 3 l r,把区间 l,r 的所有数都变成离它最近的Fib数, 并且是最小的那个. 析 ...
- hdu 5057 Argestes and Sequence(分块算法)
Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Ot ...
- HDU 3584 Cube (三维数状数组)
Cube Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 131072/65536 K (Java/Others)Total Submi ...
- poj 2481 Cows(数状数组 或 线段树)
题意:对于两个区间,[si,ei] 和 [sj,ej],若 si <= sj and ei >= ej and ei - si > ej - sj 则说明区间 [si,ei] 比 [ ...
随机推荐
- 离散化模板题 II ——重复元素离散化后的数字不相同
离散化模板题 II --重复元素离散化后的数字不相同 题目描述 现有数列A1, A2, ⋯, An,数列中可能有重复元素. 现在要求输出该数列的离散化数列,重复元素离散化后的数字不相同. 输入 第一行 ...
- Set代码
现有一整数集(允许有重复元素),初始为空.我们定义如下操作:add x 把 x 加入集合del x 把集合中所有与 x 相等的元素删除ask x 对集合中元素x的情况询问 对每种操作,我们要求进行如下 ...
- scrum项目冲刺_day05总结
摘要:今日完成任务. 1.语音识别完成 2.搜索功能实现了从数据库中的查询 总任务: 一.appUI页面(已完成) 二.首页功能: 1.图像识别功能(已完成) 2.语音识别功能(已完成) 3.垃圾搜索 ...
- 关于Container容器以及IoC注入机制的认识
container 容器的概念: 1 container 是一个Java 所编写的程序,用于对象之间之间管理对象关系. 主要的java EE 容器如下: Java容器类包含List.ArrayList ...
- C#导出数据—使用Word模板
前言 本文主要介绍C#使用标签替换的方法导出数据,导出的数据模板使用Word文档. 模板建立 首先创建一个Word文档,然后建立一个基础模板.然后将上方菜单切换到插入菜单. 然后在想填充数据的地方添加 ...
- 设置自启动nginx(适用于其他软件)(LinuxDeploy里的Ubuntu)
LinuxDeploy里的Ubuntu自启动nginx(适用于其他软件) 网上的教程是这样的,基本能用 1.编写脚本(这个文件及其内容安装Nginx后自动生成,没有的话内容自己Google) $ su ...
- 直接取PHP二维数组里面的值
具体是这样的,如下一个二维数组,是从库中读取出来的. $user = array( 0 => array( 'id' => 1, 'name' => '张三', 'email ...
- Spring Cloud Gateway 雪崩了,我 TM 人傻了
本系列是 我TM人傻了 系列第六期[捂脸],往期精彩回顾: 升级到Spring 5.3.x之后,GC次数急剧增加,我TM人傻了 这个大表走索引字段查询的 SQL 怎么就成全扫描了,我TM人傻了 获取异 ...
- Dapr + .NET Core实战(八)服务监测
服务监测 分布式服务性能指标,链路追踪,运行状况,日志记录都很重要,我们日常开发中为了实现这些功能需要集成很多功能,替换监控组件时成本也很高. Dapr 可观测性模块将服务监测与应用程序分离.它自动捕 ...
- VUE自学日志01-MVC和MVVM
一.需要了解的基础概念 Model(M)是指数据模型,泛指后端进行的各种业务逻辑处理和数据操控,主要围绕数据库系统展开.这里的难点主要在于需要和前端约定统一的接口规则. View(V)是视图层,也就是 ...