博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
周赛Problem 1025: Hkhv love spent money(RMQ)
阅读量:5346 次
发布时间:2019-06-15

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

 

Problem 1025: Hkhv love spent money

 

Time Limits:  1000 MS   Memory Limits:  65536 KB

64-bit interger IO format:  %lld   Java class name:  Main

 

Description

Hkhv喜欢花钱,尤其是给他girl friend花钱。现在有n天,每天他花了ai元(i在1到n之间)。

他现在想知道第i天到第j天之间哪天花费的钱最少,输出最少的钱。

Input

输入一个数t,表示有t(t <= 10)组数据。

每组数据输入一个数n(1 <= n <= 10000)和q(1 <= q <= 10000),接下来一行输入n个数ai(0 <= a[i] <= 10^9),ai表示第i天花费的钱。
接下来q个查询,每个查询输入i和j,表示第i天和第j天。

Output

对于每个查询输出第i天到第j天之间哪天花费的钱最少,输出最少的钱。

Sample Input

14 22 1 3 53 41 4

Output for Sample Input

31

Hint

DP思想来对多个长度为2^k区间内的最小/最大值。有待于好好理解一番。

代码:

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#define INF 0x3f3f3f3f#define MM(x) memset(x,0,sizeof(x))using namespace std;typedef long long LL;const int N=10010; int minm[N][20];int pos[N];int n;inline void RMQ_init(int n){ for(int i=1; i<=N; i++) minm[i][0]=pos[i]; for(int j=1; (1<
<=n; j++) for(int i=1;i+(1<
<=n;i++) minm[i][j]=min(minm[i][j-1],minm[i+(1<<(j-1))][j-1]);}int main(void){ int tcase,i,j,l,r,q; scanf("%d",&tcase); while (tcase--) { scanf("%d%d",&n,&q); for (i=1; i<=n; i++) { scanf("%d",&pos[i]); } RMQ_init(N); for (i=1; i<=q; i++) { scanf("%d%d",&l,&r); int k=log2(r-l+1); int ans=min(minm[l][k],minm[r-(1<

转载于:https://www.cnblogs.com/Blackops/p/5766339.html

你可能感兴趣的文章
Uber回馈开源的一些软件
查看>>
day 3 修改haproxy.cfg 作业
查看>>
UIScrollView —— 缩放实现案例(二)
查看>>
【Qt】Qt Linguist介绍【转】
查看>>
sim usim Uim 区别
查看>>
网页中插入透明Flash的方法和技巧
查看>>
动态内存申请函数选择(realloc、malloc 、alloca、 calloc)
查看>>
获取元素属性get_attribute
查看>>
视觉设计师的进化
查看>>
Python/jquery
查看>>
WPF之Binding
查看>>
【BZOJ】【2132】圈地计划
查看>>
Delphi 中big5 转 Unicode 函数
查看>>
ThreadLocal
查看>>
破损的键盘(模拟链表)
查看>>
ROS中URDF的学习以及与Xacro的比较
查看>>
适合睡前阅读的书
查看>>
Matlab心得及学习方法(不断更新)
查看>>
A Full Hardware Guide to Deep Learning
查看>>
HTTP(超文本传输协议)
查看>>