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] 比 [ ...
随机推荐
- 深入学习Composer原理(一)
Composer作为PHP的包管理工具,为PHPer们提供了丰富的类库,并且让PHP重焕新生,避免被时代淘汰的悲剧.可以说,Composer和PHP7是现在PHP开发者的标配,如果你还没用过Compo ...
- Java基础系列(8)- 数据类型
数据类型 强类型语言 要求变量的使用合乎规定,所有的变量都必须先定义才能使用.Java是强类型语言. 弱类型语言 变量定义比较随意,比如"12"+3,可以是int型123,也可以是 ...
- 大前端快闪:package.json文件知多少?
最近在公司某项目参与了一些前端工作,作为后端抠脚大汉,改点前端细节磕磕绊绊,改点大前端.工程化.HTTP交互倒也还能做到柳暗花明. 于是打算用后端程序猿的视角记录一些{大前端}的知识快闪,也算是帮助读 ...
- 使用uView UI+UniApp开发微信小程序--微信授权绑定和一键登录系统
在前面随笔<使用uView UI+UniApp开发微信小程序>和<使用uView UI+UniApp开发微信小程序--判断用户是否登录并跳转>介绍了微信小程序的常规登录处理和验 ...
- MySQL之索引复合索引有效性
首先这里建立一张数据表,并建立符合索引( index_A,index_B,index_C) CREATE TABLE `test_index_sequence` ( `Id` int(11) NOT ...
- python 建站教程
主端:安装nginx uwsgi django pymysql mysql安装mysql到http://repo.mysql.com/里面找 mysql57-community-release-el7 ...
- HTML 网页开发、CSS 基础语法——四. HTML基本语法
1. HTML规范和HTML标签 W3C:world wide web consortium,万维网联盟.专门发布和维护互联网的规范和标准. 2. HTML标签 HTML 标记通常被称为 HTML 标 ...
- Linux7安装redis6
首先下载软件包并解压 cd /opt wget https://download.redis.io/releases/redis-6.2.5.tar.gz tar -zxvf redis-6.2.5. ...
- Java基础之(四):使用IDEA实现HelloWorld
使用IDEA实现HelloWorld 在使用IDEA这个集成开发环境写Java程序之前,我们要先对IDEA进行一些基本的配置,以便我们能够更好地使用它. 新建一个空项目,用来学习基础语法 设置项目名称 ...
- 洛谷3288 SCOI2014方伯伯运椰子(分数规划+spfa)
纪念博客又一次爆炸了 首先,对于本题中,我们可以发现,保证存在正整数解,就表示一定费用会降低.又因为一旦加大的流量,费用一定会变大,所以总流量一定是不变的 那么我们这时候就需要考虑一个退流的过程 对于 ...