51Nod 1593 公园晨跑(RMQ,ST表)

51Nod 1593 公园晨跑(RMQ,ST表)

http://www.51nod.com/Challenge/Problem.html#!#problemId=1593

思路

关于ST表,建议看这篇博客:https://www.cnblogs.com/YSFAC/p/7189571.html

参考胡小兔大佬的题解搞定了,写的很好,不妨看下,这里就不罗嗦了

 1 #define IO std::ios::sync_with_stdio(0);  2 #include <bits/stdc++.h>  3 #define iter ::iterator  4 using namespace std;  5 typedef long long ll;  6 typedef pair<ll,ll>P;  7 #define pb push_back  8 #define se second  9 #define fi first 10 #define rs o*2+1 11 #define ls o*2 12 const ll inf=0x7fffffffffffffff; 13 const int N=2e5+5; 14 ll d[N],h[N],a[N],b[N]; 15 ll n,q; 16 ll ma[N][20],mi[N][20],lg[N]; 17 int check(int x,int y,int z){ 18 if(z==1)return a[x]>a[y]?x:y; 19 return b[x]<b[y]?x:y; 20 } 21 void init(){ 22 a[0]=-inf,b[0]=inf; 23 ll s=0; 24 for(ll i=1;i<=2*n;i++){ 25 s+=d[i]; 26 a[i]=s+h[i]; 27 b[i]=s-h[i]; 28 ma[i][0]=mi[i][0]=i; 29  } 30 for(ll j=1,i=0;j<=2*n;j++){ 31 lg[j]=1<<(i+1)==j?++i:i; 32 //printf("j=%d: %d\n",j,lg[j]); 33  } 34 for(int j=1;(1<<j)<=2*n;j++){ 35 for(int i=1;i+(1<<j)-1<=2*n;i++){ 36 ma[i][j]=check(ma[i][j-1],ma[i+(1<<(j-1))][j-1],1); 37 mi[i][j]=check(mi[i][j-1],mi[i+(1<<(j-1))][j-1],0); 38  } 39  } 40 } 41 ll getma(int l,int r){ 42 if(l>r)return 0; 43 int j=lg[r-l+1]; 44 return check(ma[l][j],ma[r-(1<<j)+1][j],1); 45 } 46 ll getmi(int l,int r){ 47 if(l>r)return 0; 48 int j=lg[r-l+1]; 49 return check(mi[l][j],ma[r-(1<<j)+1][j],0); 50 } 51 ll query(int l,int r){ 52 int x=getma(l,r); 53 int y=getmi(l,r); 54 if(x!=y)return a[x]-b[y]; 55 int x1=check(getma(l,x-1),getma(x+1,r),1); 56 int y1=check(getmi(l,x-1),getmi(x+1,r),0); 57 return max(a[x1]-b[y],a[x]-b[y1]); 58 } 59 int main(){ 60 scanf("%d%d",&n,&q); 61 for(int i=1;i<=n;i++){ 62 int x=i%n+1; 63 int y=i%n+1+n; 64 scanf("%lld",&d[x]); 65 d[y]=d[x]; 66  } 67 for(int i=1;i<=n;i++){ 68 scanf("%lld",&h[i]); 69 h[i]*=2; 70 h[i+n]=h[i]; 71  } 72  init(); 73 while(q--){ 74 int x,y; 75 scanf("%d%d",&x,&y); 76 if(x>y)printf("%lld\n",query(y+1,x-1)); 77 else printf("%lld\n",query(y+1,n+x-1)); 78  } 79 return 0; 80 }

 

转载于:https://www.cnblogs.com/ccsu-kid/p/10617555.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/101017.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)


相关推荐

  • maven中的groupId和artifactId到底指的是什么?「建议收藏」

    ———2017.12.01修改———-下面标黄的位置应该修改为cn.snowin.testProj,感谢网友xiaoqidela指出。—————原文——————-转载自百度知道一位网友的回答(略修改)地址:https://zhidao.baidu.com/question/1639120287056394340.h…

  • hadoop生态圈详解

    hadoop生态圈详解学习和使用hadoop有一年了,这里主要分享一下对hadoop整体上的理解,分门别类的介绍一下相关组件,最后提供了建议的学习路线,希望对hadoop的初学者有参考作用。1.Hadoop核心件组有哪些?广义hadoop指什么?l核心组件有:Hdfs、Yarn、MapReduce;l广义上指一个生态圈,泛指大数据技术相关的开源组件或产品,如hdfs、yarn、h…

  • 使用maven打包jar_两个java文件打包成jar

    使用maven打包jar_两个java文件打包成jar目录打包方法方法一:使用maven-jar-plugin和maven-dependency-plugin方法二:使用maven-assembly-plugin(推荐)方法三:使用maven-shade-plugin方法四:使用onejar-maven-plugin方法五:使用spring-boot-maven-plugin方法六:使用tomcat7-maven-plugin参考打包方法方法一:使用maven-jar-plugin和maven-dependenc.

  • 行政歌节 &#183; 萧谱1

    行政歌节 &#183; 萧谱1

  • 时间控件(选择时间范围的插件)「建议收藏」

    时间控件(选择时间范围的插件)「建议收藏」后台开发,一般都是有筛选条件的查询,那么问题就来了,根据日期范围搜索的情况下,插件要怎么选????Laydate时间控件这个是最开始,我采用的是两个时间插件,其他也没啥,就是运营部门使用起来可能感觉太麻烦,为啥不能一次让我选了,还有说老是忘记选择结束时间,然后就有了我接下来的工作。。。在此,给大家推荐一款很好使用的日期与时间组件…

  • Dubbo服务降级

    Dubbo服务降级dubbo降级服务使用dubbo在进行服务调用时,可能由于各种原因(服务器宕机/网络超时/并发数太高等),调用中就会出现RpcException,调用失败。服务降级就是指在由于非业务异常导致的服务不可用时(上面举得例子),可以返回默认值,避免异常影响主业务的处理。官方dubbo3.0-给出的服务降级RegistryFactoryregistryFactory=ExtensionLoader.getExtensionLoader(RegistryFactory.class)

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号