博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
COJ 1003 WZJ的数据结构(三)ST表
阅读量:4877 次
发布时间:2019-06-11

本文共 1311 字,大约阅读时间需要 4 分钟。

 

WZJ的数据结构(三)
难度级别:B; 运行时间限制:3000ms; 运行空间限制:51200KB; 代码长度限制:2000000B
试题描述

请你设计一个数据结构,完成以下功能:

给定一个大小为N的整数组A,M次询问。每次询问给你i,j两个参数,求Ai至Aj中最大的数。

输入
第一行为两个正整数N,M。
第二行为N个整数Ai。
接下来M行为询问。 
输出
对于每个询问输出答案。 
输入示例
6 5
1 -2 3 4 -6 7
1 2
1 1
1 5
1 6
4 6
输出示例
1
1
4
7
7
其他说明
1<=N<=10000
1<=M<=1000000
-10^9<=Ai<=10^9
1<=L<=R<=N

ST表是处理RMQ问题中询问较多的利器。注意初始化的log[0] = -1,同时记得init(现在我都不敢写成函数了要不肯定忘。。。)

1 #include
2 #include
3 #include
4 #include
5 #include
6 #include
7 #define PAU putchar(' ') 8 #define ENT putchar('\n') 9 using namespace std;10 const int maxn=100000+10,inf=-1u>>1;11 int d[maxn][20],Log[maxn],n,Q;12 inline int read(){13 int x=0,sig=1;char ch=getchar();14 while(!isdigit(ch)){ if(ch=='-')sig=-1;ch=getchar();}15 while(isdigit(ch))x=10*x+ch-'0',ch=getchar();16 return x*=sig;17 }18 inline void write(int x){19 if(x==0){putchar('0');return;}if(x<0)putchar('-'),x=-x;20 int len=0,buf[15];while(x)buf[len++]=x%10,x/=10;21 for(int i=len-1;i>=0;i--)putchar(buf[i]+'0');return;22 }23 int query(int x,int y){24 int k=Log[y-x+1];25 return max(d[x][k],d[y-(1<
>1]+1;30 for(int j=1;(1<
<=n;j++)31 for(int i=1;i+(1<
<=n;i++)32 d[i][j]=max(d[i][j-1],d[i+(1<

 

转载于:https://www.cnblogs.com/chxer/p/4419463.html

你可能感兴趣的文章
java.lang.IllegalStateException: getOutputStream() has already been cal
查看>>
作业一
查看>>
LearnMenu
查看>>
越狱机器SSH安装与使用
查看>>
使apache解析域名到目录的方法
查看>>
UI第十一节——UIActivityIndicatorView
查看>>
了解Onunload,onbeforeunload事件
查看>>
团队编程项目作业2-团队编程项目设计文档
查看>>
2017国家中心城市发展报告
查看>>
sqlalchemy相关知识
查看>>
Ubuntu下搜狗输入法乱码
查看>>
计算机网络●通信协议
查看>>
爬山算法和退火算法
查看>>
再次聊一聊promise settimeout asycn awiat执行顺序---js执行机制 EVENT LOOP
查看>>
C#中怎么生成和获取GUID
查看>>
在EditPlus里配置编译和运行java代码的方法
查看>>
gson所需jar包
查看>>
window+amp搭建步骤
查看>>
最干净的pyinstaller打包成exe应用程序方法
查看>>
Python中的数据类型
查看>>