HDU 5057 Argestes and Sequence 分块

Fortify SCA 24.4 最新可用版 Fortify Static Code Analyzer(Fortify SCA) 是一款由 Micro Focus(原惠普旗下)开发的 静态应用安全测试(SAST)工具,专注于在软件开发早期通过分析源代码或编译后的二进制文件,识别潜在的安全漏洞、代码缺陷和合规性问题。以下是其核心特点与功能:核心功能 静态代码分析 在不运行程序的情况下,通过语法、语义分析检测代码中的安全漏洞(如 SQL 注入、跨站脚本(XSS)、缓冲区溢出等)和代码质量问题。 阅读详情
题意:给N个数,有两种操作,S x y 将a[x]变为y;Q x y d p 寻找[x,y]之内第d位的数为p的个数。
思路:开始一想,裸的线段树呀,敲了之后,MLE,然后一愣,有点傻眼了,卡空间。然而正解是分块,就是把N分成 N−−√ 份,再处理,写跪了N发之后才A。也是爽。各种WA,TLE。复杂度N* N−−√ 。

http://acm.hdu.edu.cn/showproblem.php?pid=5057

/*********************************************
    Problem : HDU 5057
    Author  : NMfloat
    InkTime (c) NM . All Rights Reserved .
********************************************/

#include <map>
#include <set>
#include <queue>
#include <cmath>
#include <ctime>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <iostream>
#include <algorithm>

#define rep(i,a,b)  for(int i = a ; i <= b ; i ++)
#define rrep(i,a,b) for(int i = b ; i >= a ; i --)
#define repE(p,u) for(Edge * p = G[u].first ; p ; p = p -> next)
#define cls(a,x)   memset(a,x,sizeof(a))
#define lson rt<<1
#define rson rt<<1|1

using namespace std;

const int MOD = 1e9+7;
const int INF = 0x3f3f3f3f;
const int MAXN = 1e5+5;
const int MAXE = 2e5+5;

typedef long long LL;

int T,n,m,k;

int A[400][11][10];//最多分成300+块。
int NUM[MAXN];

int st,lt;
int tmp;

void START() {
    st = sqrt(n);//块的长度.
    lt = st * st == n ? st : st + 1;
    int base = 0;
    cls(A,0);
    rep(i,1,lt) {
        //一共有lt段;
        rep(j,1,st) {
            if(base+j > n) return ;
            tmp = NUM[base + j]; 
            rep(ia,1,10) {
                A[i][ia][tmp%10] ++;
                tmp /= 10;
            }
        }
        base += st;
    }
}

void out() {
    rep(i,1,n) printf("%d ",NUM[i]);
    puts("\n");
    printf("st : %d lt : %d\n\n",st,lt);
    rep(i,1,lt) {
        rep(ia,1,10) {
            rep(ib,0,9) {
                printf("%d ",A[i][ia][ib]);
            }
            puts("");
        } 
        puts("");
    }
    puts("\n");
}

void Update(int pos,int num) {
    int oldnum = NUM[pos];
    NUM[pos] = num;
    int nowpos = (pos + (st - 1)) / st; //表示pos在第几个区间。

    tmp = oldnum; 
    rep(ia,1,10) {
        A[nowpos][ia][tmp%10] --;
        tmp /= 10;
    }

    tmp = num; 
    rep(ia,1,10) {
        A[nowpos][ia][tmp%10] ++;
        tmp /= 10;
    }
}

int ANS ;
int digit[11];

void Query(int left,int right,int d,int p) {
    //计算1..(left-1) 1..right的值
    // int nowpos = (left - 1) / st;
    // int leftans = 0;
    // rep(i,1,nowpos) {
    //     leftans += A[i][d][p];
    // } 
    // rep(i,nowpos * st + 1,left-1) {
    //     tmp = NUM[i]; 
    //     rep(ia,1,10) {
    //         if((ia == d) && (tmp % 10 == p)) leftans ++;
    //         tmp /= 10;
    //     }
    // }

    // nowpos = right / st ;
    // int rightans = 0;
    // rep(i,1,nowpos) {
    //     rightans += A[i][d][p];
    // } 
    // rep(i,nowpos * st + 1,right) {

    // }
    // ANS = rightans - leftans;
    int L = (left + st - 1 ) / st + 1; int R = (right + st - 1) / st - 1;
    //printf("L : %d R : %d\n",L,R);
    if(L > R) {
        rep(i,left,right) {
            if((NUM[i]/digit[d])%10==p)ANS ++;
        }
    }
    else {
        rep(i,L,R) {
            ANS += A[i][d][p];
        }
        rep(i,left,(L-1)*st) {
            if((NUM[i]/digit[d])%10==p)ANS ++;
        }
        rep(i,R*st+1,right) {
            if((NUM[i]/digit[d])%10==p)ANS ++;
        }
    }
} 

int ReadInt() { //可以读负数;
    char tempc; int minus = 1; int ret = 0; scanf("%c",&tempc);
    while(tempc < '0' || tempc > '9') { if(tempc == '-') minus = -1 ; scanf("%c",&tempc); }
    while(tempc >= '0' && tempc <= '9') { ret = ret * 10 + tempc - '0' ; scanf("%c",&tempc); }
    return ret * minus;
}

void input() {
    scanf("%d %d",&n,&m);
    //n = ReadInt(); m = ReadInt();
    char op[5];
    rep(i,1,n) scanf("%d",&NUM[i]); // NUM[i] = ReadInt();//
    digit[1] = 1;
    rep(i,2,10) digit[i] = digit[i-1] * 10;
    START();
    //out();
    int x,y,d,p;
    rep(i,1,m) {
        scanf("%s",op);
        if(op[0] == 'S') {
            // x = ReadInt(); y = ReadInt();
            scanf("%d %d",&x,&y);
            Update(x,y);
        }
        else {
            // x = ReadInt(); y = ReadInt();
            // d = ReadInt(); p = ReadInt();
            scanf("%d %d %d %d",&x,&y,&d,&p);
            ANS = 0;
            Query(x,y,d,p);
            printf("%d\n",ANS);
        }
    }
}

void solve() {

}

int main(void) {
    //freopen("a.in","r",stdin);
    scanf("%d",&T);
    while(T--) {
    //while(~scanf("%d %d",&n,&m)) {
        input();
        solve();
    }
    return 0;
}
借助Claude实现Playwright的自动化(MCP Server) MCP Server自己开发也是可以的,现在也有很多开箱即用的MCP Server,可以在https://github.com/modelcontextprotocol/servers中查找。 阅读详情

相关推荐

模型检测--工具KeYmaera

论文:KeYmaera: A Hybrid Theorem Prover for Hybrid Systems 作者:Andre Platzer and JanKeYmaera摘要1 介绍2用于混合系统的KeYmaera验证工具3混合系统,混合自动机和混合程序 摘要 KeYmaera是一种用于混合系统的混合验证工具,它结合了演绎,实数代数和计算机代数证明者技术。它是自然的自动和交互式定理证明器 混合系统的规范和验证逻辑。 KeYmaera支持差分动态逻辑,它是用于混合程序的实值一阶动态逻辑,是混合自动机的程

ziigea的博客 1077

【HDU No. 5057】序列操作 Argestes and Sequence

【HDU No. 5057】序列操作 Argestes and Sequence

代码改变世界 469

【Godot】构建可维护的游戏工程 —— 项目代码组织结构

本文系统梳理了Godot引擎项目组织原则与架构模式,提出场景中心化、命名规范一致性和资源隔离三大核心原则。推荐按功能模块划分目录结构(如scenes/、entities/、systems/),采用snake_case命名避免跨平台问题,并通过.gdignore优化资源管理。文章详细解析了自包含场景设计、信号驱动解耦等架构技巧,以及团队协作中的版本控制策略,强调通过模块化设计平衡一致性与实用性。最终目标构建清晰可维护的项目结构,使资源定位和功能扩展更加高效。(148字)

qq_40205510的博客 1176

HDU 5057:Argestes and Sequence ← 分块算法(单点更新、区间查询)

● 分块是用线段树的分区思想改良的暴力法。代码比线段树简单。效率比普通暴力法高。分块适合求解 m=n=10^5 规模的问题。或 m*sqrt(n)≈10^7 的问题。其中,n 为元素个数,m 为操作次数。

hnjzsyjyj的专栏 1290

Cadence 17.2 OrCAD原理图库实战:从零创建电阻/电容/LED元件(附封装技巧)

本文以Cadence 17.2 OrCAD为核心,详细讲解了如何从零开始工程化地创建电阻、电容、LED等原理图库元件。内容涵盖库架构设计、符号绘制、引脚属性管理、封装关联技巧以及设计规则检查,旨在帮助硬件工程师构建规范、可复用且易于维护的元件库,为高效PCB设计奠定坚实基础。

weixin_29195615的博客 400

无人驾驶-2024-09-智能驾驶与机器视觉09:视觉与多传感器融合

从本章开始,我们将详细介绍视觉与多传感器融合技术。自动驾驶中常用的传感器都有其优势和局限性,单一传感器无法应对复杂的驾驶场景。多传感器融合技术旨在综合利用不同的传感器优势,提升感知的精度和鲁棒性。本章首先介绍多传感器融合的相关概念,之后详细介绍典型的融合方法。

u013250861的博客 593

hdu-5057(离线的树状数组)

题意是50个测试用例,每次输入一个大小为10万int型的序列,附带有10万个操作,操作分为改动元素值和询问 赋值的格式是 S A B,意思是a【A】=B 询问的格式Q L R D P,意思是从a【L】到a【R】区间所有整数第D位为P的元素个数 比如区间是 。。。11 12 13.。。。那么D=2 P=1就表示第二位(十位)是1的元素个数,结果为3   int型数据最多D=10位,每位只有

AC之路 768

EXI编解码避坑指南:ISO15118-2协议中3条异常命令的差异分析

本文深度剖析了ISO15118-2协议测试中EXI编解码的典型问题,聚焦于ChargeParameterDiscoveryRes、CertificateInstallationReq和MeteringReceiptReq三条命令在不同工具间产生109字节差异的现象。通过对比EXICodec.jar、OpenEXI和Efficient XML的输出,揭示了差异根源于EXI报头处理机制与模式文件完整性,并提供了从现象确认、根因分析到解决方案的标准化排查流程,助力协议测试工程师确保编解码一致性与通信可靠性。

algae的博客 411

HDU 5057-平方分割(分块)

这题如果知道了要分块做还是很简单的,分块的思想主要就是把一个连续的区间分成根号n块。。 这里仔细想想和线段树的思想有些类似,很多区间查询的题可以用分块思想解决,不过根号n比较慢就是了,但是有些在线段树上复杂的操作写起来很方便, 这道题题意就是查询一个区间内第d位为p的数有多少,那么一个块里面存一个【10】【10】也是容易想到的,剩下的就是暴力了。。 PS.代码太挫了,卡过时间,人傻复杂度大。

zxl博客 763

移相变压器Simulink建模与HVDC系统仿真实践

移相变压器是电力电子领域实现精确相位调节的核心设备,其通过特殊绕组设计改变输出电压相位角,在解决环网潮流不均、阻尼功率振荡等场景具有关键作用。本文基于MATLAB/Simulink环境,详细解析移相变压器的建模原理与技术实现,包括磁路耦合特性模拟、参数计算方法和控制策略设计。针对HVDC高压直流输电和FACTS柔性交流输电系统等典型应用,提供仿真模型搭建技巧与问题排查指南,特别涵盖新能源并网场景下的相位调节优化方案。通过实测数据验证,所建模型在稳态精度和动态响应方面均满足工程要求,为电力系统稳定性分析提供有

weixin_28278377的博客 270

SAP 系统里生成 PDF 的几条主干路径:从 Spool 转换到 Adobe 原生渲染,再到 BTP 云服务

本文系统梳理了SAP生态中PDF生成的多种技术方案,包括Spool转换、OTF转换、Smart Forms/Adobe Forms原生生成以及云端服务等不同路径。文章通过实际案例和代码示例,详细分析了各方案的适用场景、技术要点和工程实践建议,特别强调了多语言支持、字体处理、性能优化等关键因素。针对不同业务需求,提供了从简单导出到复杂交互式PDF的完整解决方案框架,为SAP环境下的PDF处理提供了实用指南。

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 288

HDU 5057 分块

题意有一组数,支持两种操作,修改和查询。每次查询可查询L到R这个区间内,第D位为P的元素有多少个。每次修改可修改一个点的值。题解纯分块,将元素分成256个元素为一块。使用num[i][j][k]代表第i块,第j位为k的元素有多少个。dig[i][j]代表第i个元素的第j位为多少。每次修改直接修改就可以了。每次查询对于l所在块和r所在块逐个遍历,对于中间块直接读取值就可以了。代码#include <i

zhenlingcn的博客 477

双目相机标定理论与编程实现

双目相机标定是计算机视觉中的重要任务,通过确定双目相机的内参和外参,可以实现立体视觉的深度感知和三维重建。通过使用OpenCV库提供的函数,我们可以方便地进行双目相机的标定工作。双目相机标定是计算机视觉中的重要任务,用于确定双目相机的内参和外参,以实现立体视觉的深度感知和三维重建。通过上述代码,我们可以获得左右相机的内参矩阵、畸变系数、旋转矩阵和平移矩阵等参数,从而完成双目相机的标定过程。使用双目相机采集一系列左右相机的图像,确保标定板在不同位置和角度下都能被双目相机拍摄到。函数来检测标定板的角点。

ByteKnight的博客 325

HDU 5057 Argestes and Sequence (离线树状数组 || 分块)

题目链接 题意还是很简单的,Q是查询,S是重新设置数, 一开始用线段树三维数组做的,内存估计有100000*4*10*10,结果超内存了,意料之内,纯粹是想复习一下线段树 后来才学到降维,降低空间牺牲时间, 代码一: 离线树状数组(离线:就是指把操作放一起,每次都要把操作遍历一遍,更新结果数组ans,最后统一把结果输出) #include #include #include

NeWnIx 504

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

SIMATIC S7-1200, S7-1500 PID 控制[手册]

SIMATIC S7-1200, S7-1500 PID 控制[手册]

HDU5057 Argestes and Sequence(分块题解)

遇见区间问题,我们先想到的是高级数据结构,如树状数组,线段树等,(当然这道题也是一道训练树状数组的好题,只不过编码难度比较高,需要关注空间优化 ,降维),,而分块编码比较简单,需要我们分析复杂度,另外此题的位数查询中有个小trick,少了会TLE.这道题是比较经典的分块中,单点修改+区间查询的应用。

lhhhhr的博客 323

NTscan扫描工具

ntscan是一个扫描器,可以扫描没有密码和弱密码的共享,先到配置文件中填写猜测的用户名和密码,扫描过程中右侧出现的是扫描日志。

hdu5057 Argestes and Sequence 分块

Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 857 Accepted Submission(s): 240 Problem Description Argestes has a lot of hobbies...

weixin_33895657的博客 164

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

【分块】hdu5057 Argestes and Sequence

分块,v[i][j][k]表示第i块内第j位是k的元素数。非常好写。注意初始化 要注意题意,①第i位是从右往左算的。 ②若x没有第i位,则用前导零补齐10位。比如103---->0000000103。 1 #include<cstdio> 2 #include<cmath> 3 #include<cstring> 4 using n...

weixin_34014277的博客 92

hdu 5057 Argestes and Sequence(分块算法)

Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 566 Accepted Submission(s): 142 Problem Description Arges...

weixin_30487701的博客 166

HDU5057-Argestes and Sequence(分块&&树状数组)

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

wang_128的博客 472

[HDOJ5057] Argestes and Sequence (分块, 暴力)

题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=5057 分块,维护每块中每位的每个数位出现的次数。 1 #include <bits/stdc++.h> 2 using namespace std; 3 4 const int maxn = 100100; 5 const int maxm = 1010; ...

weixin_30325971的博客 140

HDU 5057 Argestes and Sequence 离线处理+树状数组

HDU 5057 题意:给出n个数的序列a,m个操作. n,m 操作1:[s,x,y] 将第x个数设置成y a[x]=y. 操作2:[q,l,r,d,p] 问[l,r]内有多少个数的第D位(从低位开始数)正好是数字P. 关键:离线一位一位处理,假如现在处理的都是:关于第i位的询问. 遍历序列中的每个数,将每个数的第i位都仍到树状数组中,BIT要多加一维 标志当前这个位置第i位出现

noone0的博客 267

HDU - 5057 Argestes and Sequence

题目:有n个数,2种操作,S X Y将arr[x]改为Y,Q L R D P,询问区间[L,R]中第D为是P的数的个数 思路:分块,sum[i][j][k]表示第i块第j位为k的数的个数 代码: #pragma comment(linker, "/STACK:1024000000,1024000000") #include #include #include #include #includ

ACVevtor的博客 323

hdu 5057 Argestes and Sequence

Argestes and Sequence Time Limit: 5000/2500 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 511    Accepted Submission(s): 127 Problem Description Argest

浮躁的人,终究一事无成! 1202

HDU 5057 Argestes and Sequence

传送门:点击打开链接Problem DescriptionArgestes has a lot of hobbies and likes solving query problems especially. One day Argestes came up with such a problem. You are given a sequence a consisting of N nonnega...

Xavier's blog 242

hdu 5057 Argestes and Sequence(树状数组)

hdu 5057 Argestes and Sequence zhu y

solotzg 814

HDU 5057 Argestes and Sequence(树状数组)

题目描述: 给你N个数,有M个查询,每次查询输入一个字符“Q”、“S”,为“Q”时输入四个数,“L”、“R”、“D”、“P”,代表查询这N个数从“L"到”R“之间第D位(从个位数起)为”P“的个数。为”S“时,输入两个数,”X“、”Y“,表示将这N个数中的第”X“个数,改为”Y“。 做题想法: 刚开始的时候开了一个三维 的树状数组,结果MLE了,后来就想到每个数的各个为互不影响,就可以从第一

stiyet的博客 588
上一篇: HDU 2686 Matrix 最小费用最大流
下一篇: HDU 3836 Equivalent Sets 强连通分量
_NMfloat_
博客等级 码龄12年 7粉丝 315原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值