博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
HDU 3410 Passing the Message
阅读量:6068 次
发布时间:2019-06-20

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

可以先处理出每个a[i]最左和最右能到达的位置,L[i],和R[i]。然后就只要询问区间[ L[i],i-1 ]和区间[ i+1,R[i] ]最大值位置即可。

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
using namespace std;typedef long long LL;const double pi=acos(-1.0),eps=1e-8;void File(){ freopen("D:\\in.txt","r",stdin); freopen("D:\\out.txt","w",stdout);}inline int read(){ char c = getchar(); while(!isdigit(c)) c = getchar(); int x = 0; while(isdigit(c)) { x = x * 10 + c - '0'; c = getchar(); } return x;}const int maxn=50000+10;int T,n,a[maxn],L[maxn],R[maxn],dp[maxn][30];void RMQ_init(){ for(int i=0;i
a[dp[i+(1<<(j-1))][j-1]]) dp[i][j]=dp[i][j-1]; else dp[i][j]=dp[i+(1<<(j-1))][j-1]; }}int RMQ(int L,int R){ int k=0; while((1<<(k+1))<=R-L+1) k++; if(a[dp[L][k]]>a[dp[R-(1<
a[i]) break; pre=L[pre-1]; } } for(int i=n;i>=1;i--) R[i]=i; for(int i=n-2;i>=0;i--) { if(a[i]
a[i]) break; pre=R[pre+1]; } } RMQ_init(); printf("Case %d:\n",cas++); for(int i=0;i
i-1) printf("0 "); else printf("%d ",RMQ(L[i],i-1)+1); if(R[i]

 

转载于:https://www.cnblogs.com/zufezzt/p/5740703.html

你可能感兴趣的文章
server r2 系统更新文件清理
查看>>
WINFORM写入COOKIE
查看>>
Eclipse在线集成maven M2eclipse插件
查看>>
Jmeter 专题
查看>>
imx6 uboot logo 更改
查看>>
Xen虚拟机克隆实战
查看>>
循序渐进,了解Hive是什么!
查看>>
Codeforces Round #369 (Div. 2) C. Coloring Trees 动态规划
查看>>
ActiveMQ笔记(7):如何清理无效的延时消息?
查看>>
Linux系统文件访问控制列表
查看>>
js私有共有成员
查看>>
Linux 下 Shell 命令的分类及用法
查看>>
C# 中的 ref 和 out 的意义和使用方法
查看>>
相信自己,越活越坚强
查看>>
各种参数的响应时间
查看>>
phoenix将hdfs数据导入hbase
查看>>
phpstorm使用技巧
查看>>
Spark SQL在100TB上的自适应执行实践(转载)
查看>>
理解metrics.classification_report
查看>>
MongoDB学习笔记(一)安装配置
查看>>