分享web开发知识

注册/登录|最近发布|今日推荐

主页 IT知识网页技术软件开发前端开发代码编程运营维护技术分享教程案例
当前位置:首页 > 技术分享

loj2074 「JSOI2016」灯塔

发布时间:2023-09-06 01:54责任编辑:苏小强关键词:暂无标签

loj 题面错的……去bzoj上看吧qwq

观察到 \(\sqrt{|i-j|}\) 的取值只有 \(\sqrt{n}\) 级别个,然后就很显然了,rmq。

#include <iostream>#include <cstdio>using namespace std;int n, a[100005], st[100005][19], mlg[100005];int getMax(int l, int r){ ???if(l>r) return -0x3f3f3f3f; ???int p=mlg[r-l+1]; ???return max(st[l][p], st[r-(1<<p)+1][p]);}int main(){ ???cin>>n; ???for(int i=1; i<=n; i++){ ???????scanf("%d", &a[i]); ???????st[i][0] = a[i]; ???} ???for(int i=2; i<=n; i++) ???????mlg[i] = mlg[i>>1] + 1; ???for(int i=1; i<=17; i++) ???????for(int j=1; j<=n && j+(1<<(i-1))<=n; j++) ???????????st[j][i] = max(st[j][i-1], st[j+(1<<(i-1))][i-1]); ???for(int i=1; i<=n; i++){ ???????int p=a[i]; ???????for(int x=1; ; x++){ ???????????p = max(p, getMax(max(i-x*x, 1), i-(x-1)*(x-1)-1)+x); ???????????if(i-x*x<=1) ???break; ???????} ???????for(int x=1; ; x++){ ???????????p = max(p, getMax(i+(x-1)*(x-1)+1, min(i+x*x, n))+x); ???????????if(i+x*x>=n) ???break; ???????} ???????printf("%d\n", p-a[i]); ???} ???return 0;}

loj2074 「JSOI2016」灯塔

原文地址:https://www.cnblogs.com/poorpool/p/9049238.html

知识推荐

我的编程学习网——分享web前端后端开发技术知识。 垃圾信息处理邮箱 tousu563@163.com 网站地图
icp备案号 闽ICP备2023006418号-8 不良信息举报平台 互联网安全管理备案 Copyright 2023 www.wodecom.cn All Rights Reserved