NYOJ 119 士兵杀敌(三)【ST算法】

NYOJ 119 士兵杀敌(三)[RMQ例题]【解题报告】 #include #include #include #include #define inf 0x3f3f3f3f #define LL unsigned long long #define maxn 100001 using namespace std; int n,q; int a[maxn]; int maxsum[maxn][20],minsum[maxn][20]; void RMQ 阅读详情

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119

解题思路:

RMQ算法。

不会的可以去看看我总结的RMQ算法。

http://blog.youkuaiyun.com/niushuai666/article/details/6624672


代码如下:

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int N = 100010;
int maxsum[N][20], minsum[N][20];

void RMQ(int num) //预处理->O(nlogn)
{
	for(int j = 1; j < 20; ++j)
		for(int i = 1; i <= num; ++i)
			if(i + (1 << j) - 1 <= num)
			{
				maxsum[i][j] = max(maxsum[i][j - 1], maxsum[i + (1 << (j - 1))][j - 1]);
				minsum[i][j] = min(minsum[i][j - 1], minsum[i + (1 << (j - 1))][j - 1]);
			}
}

int main()
{
	int num, query;
	int src, des;
	scanf("%d %d", &num, &query);
		for(int i = 1; i <= num; ++i) //输入信息处理
		{
			scanf("%d", &maxsum[i][0]);
			minsum[i][0] = maxsum[i][0];
		}
		RMQ(num);
		while(query--) //O(1)查询
		{
			scanf("%d %d", &src, &des);
			int k = (int)(log(des - src + 1.0) / log(2.0));
			int maxres = max(maxsum[src][k], maxsum[des - (1 << k) + 1][k]);
			int minres = min(minsum[src][k], minsum[des - (1 << k) + 1][k]);
			printf("%d\n", maxres - minres);
		}
	return 0;
}

代码优化后:

#include<cstdio>
#include<algorithm>
#include<cmath>
using namespace std;

const int N = 100010;
int maxsum[20][N], minsum[20][N]; //优化1

void RMQ(int num) //预处理->O(nlogn)
{
	for(int i = 1; i != 20; ++i)
		for(int j = 1; j <= num; ++j)
			if(j + (1 << i) - 1 <= num)
			{
				maxsum[i][j] = max(maxsum[i - 1][j], maxsum[i - 1][j + (1 << i >> 1)]); //优化2
				minsum[i][j] = min(minsum[i - 1][j], minsum[i - 1][j + (1 << i >> 1)]);
			}
}

int main()
{
	int num, query;
	int src, des;
	scanf("%d %d", &num, &query);
		for(int i = 1; i <= num; ++i) //输入信息处理
		{
			scanf("%d", &maxsum[0][i]);
			minsum[0][i] = maxsum[0][i];
		}
		RMQ(num);
		while(query--) //O(1)查询
		{
			scanf("%d %d", &src, &des);
			int k = (int)(log(des - src + 1.0) / log(2.0));
			int maxres = max(maxsum[k][src], maxsum[k][des - (1 << k) + 1]);
			int minres = min(minsum[k][src], minsum[k][des - (1 << k) + 1]);
			printf("%d\n", maxres - minres);
		}
	return 0;
}

优化1:数组由F[N][20]变为F[20][N];

因为数组的地址为a + i + j,对应上面数组,我们需要先循环N的部分,所以

如果是第一种,我们计算时因为i不断变化,我们就需要计算a + i + j

如果是第二种,我们计算时a + i不变,只需要改变j

优化2:

位运算

转载至:http://blog.youkuaiyun.com/niushuai666/article/details/7400587

自己也放心不下ST算法

Windows Server 搭建ftp服务 阅读详情

相关推荐

HFSS简要教程--无线能量传输线圈仿真

关于无限能量传输线圈仿真简要教程

asdmoon18的博客 2546

试题 算法训练 士兵杀敌(二)

资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。   小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。   南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。 输入格式   多组测试数据,以EOF结尾;   每组第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1&lt

m0_66749069的博客 838

单相全桥逆变器中比例谐振(PR)控制的优化设计与实现

本文深入探讨了比例谐振(PR)控制在单相全桥逆变器中的优化设计与实现。通过对比PID控制,详细阐述了PR控制在50Hz基波频率处实现无静差跟踪和强抗干扰性的原理。文章提供了从理论建模、参数整定(Kp, Kr, ωc)到仿真验证的完整实战流程,并介绍了准比例谐振(QPR)控制以增强频率鲁棒性,以及多谐振点设计以抑制特定谐波等进阶优化方法,最终实现THD从3%降至1%以内的显著性能提升。

weixin_29056781的博客 176

蓝桥杯算法训练合集三 1.车的位置2.24点3.最大分解4.RP大冒险5.士兵杀敌(二)

在一个n*n的棋盘中,每个格子中至多放置一个车,且要保证任何两个车都不能相互攻击,有多少中放法(车与车之间是没有差别的)每组第一行是两个整数N,M,其中N表示士兵的个数(1

weixin_58628068的博客 576

基于航天宏图PIE-SAR软件的高分三号(GF-3)SAR影像的预处理

软件官网 航天宏图—国内领先的卫星运营与应用服务提供商(官网) 一、数据导入 数据导入-GF-3-根据模式选择 参数文件导入解压后GF-3数据的XML文件 通道自动填充 设置输出目录 确定 等待,加载图像、自动构建金字塔 二、复数数据转换 强度/幅度特征是SAR影像最主要的特征之一,基于SAR强度/幅度影像可以提取地物目标信息,因此需要将SAR复数数据转换为SAR强度/幅度数据。导入输入影像,设置参数类型,输出目录、命名、类型; 漫长的等待 三、多视 为提...

weixin_52127098的博客 9002

拯救我的老平板三星note8.0 table(GT-N5110)升级到lineage os-14.1(android7.1)全记录

买了多年的三星平板note8.0已经闲置了一段时间,今天在家不能出门,也没啥事,就把它拿出来刷新系统。不成想居然搞了一天,还差点变成了砖。 原版的系统是安卓4.0的系统,很多软件已经不能用了,微信、优酷都不支持,而且三星也不提供更新升级,于是寻求第三方解决方案。折腾过程一波三折,就不赘述了,我就讲一下正确的操作过程吧。 切记我这里讲的过程只针对三星note8.0 table,国行版本,版本号是...

weixin_41108814的博客 2万+

试题 算法训练 士兵杀敌(二)(Java) 逻辑清晰

问题描述   南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。   小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。   南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。    输入格式   多组测试数据,以EOF结尾;   每组第一行是两个整数N,M,其中N表示士兵的个数(1<N<1000000),M表示指令的条数。(1<M<100000)   随后的一行是N个整数,ai表

Easenyang的博客 1023

Isaac Sim 6 利用Replicator实现高效语义分割与实例分割(实践指南5.10)

本文详细介绍了如何利用Isaac Sim 6的Replicator工具高效生成语义分割和实例分割数据集。通过虚拟环境自动标注,效率提升20倍以上,特别适用于农业机器人等计算机视觉项目。文章包含环境配置、场景构建、批量标注技巧及实例分割处理等实战指南,帮助开发者快速掌握合成数据生成技术。

weixin_42526415的博客 265

士兵杀敌(二)

题目:南将军手下有N个士兵,分别编号1到N,这些士兵的杀敌数都是已知的。小工是南将军手下的军师,南将军经常想知道第m号到第n号士兵的总杀敌数,请你帮助小工来回答南将军吧。南将军的某次询问之后士兵i可能又杀敌q人,之后南将军再询问的时候,需要考虑到新增的杀敌数。 思路:可以通过暴力的方法来解决但是算法的复杂度就很高了,也可以采取树状数组来解决,这样可以改善对sum值的修改时间。import java

coocner的博客 375

从ST转国产ARM必看:GD32/APM32等5款芯片的SWD下载全攻略(含CH32特殊处理)

本文为从STM32转向国产ARM芯片的开发者提供了详细的SWD下载调试指南。针对GD32F103C8T6、APM32F103C8T6等五款热门国产芯片,详细说明了如何利用已有的ST-Link工具和Keil MDK环境进行程序烧录,并特别介绍了CH32F103芯片所需的独立器件库安装等特殊处理方法,帮助开发者实现平滑迁移,提升开发效率。

weixin_29195615的博客 278

Python高阶爬虫:逆向工程模拟Wind/同花顺等金融终端数据抓取

本文详细阐述了模拟金融数据终端进行数据抓取的全套技术方案。我们从法律合规性讲起,选择了Playwright作为核心自动化工具,通过两个实战案例(同花顺网页版和Wind桌面版)演示了从分析、模拟到数据解析的完整流程,并进一步介绍了构建健壮爬虫系统所需的高级技巧。我们的策略是:启动一个由Playwright控制的浏览器,模拟真人登录,然后监听所有网络请求,从中过滤出我们需要的那个数据API。if key in ['f43', 'f169', 'f170', 'f46', 'f60']: # 价格类字段。

2201_76125261的博客 546

NYOJ-119 士兵杀敌(三)【RMQ算法】

题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 解题思路: RMQ算法。 不会的可以去看看我总结的RMQ算法。 http://blog.youkuaiyun.com/niushuai666/article/details/6624672 代码如下: #include #include #include using

飘过的小牛 6390

从原理到落地:Mamba-YOLOv8 全面实战指南(源码 + 训练 + 部署一次学会)

在目标检测领域,CNN与Transformer的较量从未停歇。本文提出一种革命性的架构——,将状态空间模型(SSM)首次引入YOLO框架。实验表明,该模型在COCO数据集上达到54.3% mAP@0.5,推理速度达89 FPS(RTX 4090),相比原版YOLOv8提升12.7%精度与23%速度。本文将完整揭示其技术原理与工程实现,助您掌握这一前沿技术。

FJN110的博客 119

[NYOJ 119] 士兵杀敌(三) (RMQ ST算法)

题目链接:http://acm.nyist.edu.cn/JudgeOnline/problem.php?pid=119 题目大意: 有N个士兵,从左到右排成一排,编号从1到N,每个人杀了不同数量的敌人。现在有Q个询问,每次询问要求求出[L,R]区间杀敌做多的和杀敌最少的差。 RMQ ST算法裸题。 /* ID: wuqi9395@126.com PROG: beads LANG:

SIOFive的专栏 1119

NTscan扫描工具

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

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

nyoj 119 士兵杀敌(三) St算法

士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。 所以,南将军经常问军师小工第i号士兵到第j号

大神养成中..... 1441

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

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

nyoj119 士兵杀敌(三) ST算法和线段树

原题链接:nyoj119 士兵杀敌(三) 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。 所以,南

anchorite 2701

数学建模模型总结

这是本人在两年内准备参加数学建模竞赛搜集到的模型资料,已经经过了本人的筛选和整理,希望能够对准备参加数学建模竞赛的学弟学妹们提供一些帮助!

NYOJ119士兵杀敌(三)(st算法)

士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。 所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人

z956281507的博客 503

【nyoj 119】 士兵杀敌(三) 【RMQ ST算法】

南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少。现在,请你写一个程序,帮小工回答南将军每次的询问吧。注意,南将军可能询问很多次

lzs_lazy 272

NYOJ 119 士兵杀敌(三) (RMQ ST算法)

题目119 题目信息 运行结果 本题排行 讨论区 士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也

MADE_Y 398

利用ST (Sparse - Table)算法求解区间最大/小值(RMQ)问题(以nyoj119-士兵杀敌(三)为例)

问题介绍: RMQ(Range Minimum/Maximum Query),即区间最值查询,是指这样一个问题:对于长度为n的数列a,回答若干询问RMQ(A,i,j)(i, j&lt;=n),返回数列a中下标在i,j之间的最小/大值。 如果只有一次询问,那样只有一遍for就可以搞定,但是如果有许多次询问就无法在很快的时间处理出来。这里最简单的做法是采用暴力搜索,依次搜索给定区间中的元素,找出...

为梦奔跑的博客 340

NYOJ 119 士兵杀敌(三) RMQ ST

NYOJ 119 士兵杀敌(三) RMQ ST 题目链接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119 思路: ST在线 预处理O(nlogn) 查询O(1) 运行时间:828ms 可以用31-__builtin_clz(r-l+1)来代替k=(int)(log(r-l+1.0)/log(2.0)) 这样还能稍快20ms 代...

ddqb3235的博客 180

【解题报告】NYOJ 119 士兵杀敌(三)--RMQ算法详解

RMQ问题 题目连接:http://acm.nyist.net/JudgeOnline/problem.php?pid=119------  士兵杀敌(三) 大意就是,有一个数列 {a1,a2,a3,a4,a5,a6,a7.......an} ,在其中连续的区间内,算出该区间内最大最小值的差。 示范数据:9  2 5  1  10 7  3  21 8  15  4 22  19  6 [

生命有一种绝对 1919

NYOJ_119_士兵杀敌(三)(RMQ-ST)

分析:RMQ-ST算法模板题。

一点也不二 1040

(RMQ--ST)NYOJ119 士兵杀敌(三)

传送门:NYOJ119 士兵杀敌(三) 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。 所以,南将军经常问军师小工第i号士兵到第j号士兵中,杀敌数最高的人与杀敌数最低的人之间军功差值是多少。 现在,请你写一个程...

256

NYOJ 119 士兵杀敌(三) (RMQ)

          RMQ (Range Minimum/Maximum Query)问题是指:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j&lt;=n),返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。 主要方法及复杂度如下: 1. 朴素(即搜索),O(n)-O(qn) online。 2. 线段树,O(n)-O(qlongn) on...

Charles_Zaqdt的博客 295

NYOJ 119 士兵杀敌(三)

士兵杀敌(三) 时间限制:2000 ms  |  内存限制:65535 KB 难度:5 描述 南将军统率着N个士兵,士兵分别编号为1~N,南将军经常爱拿某一段编号内杀敌数最高的人与杀敌数最低的人进行比较,计算出两个人的杀敌数差值,用这种方法一方面能鼓舞杀敌数高的人,另一方面也算是批评杀敌数低的人,起到了很好的效果。 所以,南将军经常问军师小工第i号士兵到第j号士兵中,

Python3 爬虫实战 1:应对特殊字体,爬取猫眼电影实时排行榜 2012
上一篇: Poj 2559 最大矩形面积 v单调栈
下一篇: NYOJ-109 数列转换 AC
梁千仞
博客等级 码龄15年 12粉丝 71原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值