loj2074 「JSOI2016」灯塔

Posted poorpool

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了loj2074 「JSOI2016」灯塔相关的知识,希望对你有一定的参考价值。

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」灯塔的主要内容,如果未能解决你的问题,请参考以下文章

[JSOI 2016] 灯塔

loj#2076. 「JSOI2016」炸弹攻击 模拟退火

[JSOI2016]灯塔/[POI2011]Lightning Conductor

loj2073 「JSOI2016」扭动的回文串

JSOI2016独特的树叶

[loj2546][JSOI2018]潜入行动(树形DP)