博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
一维和二维ST模板
阅读量:7296 次
发布时间:2019-06-30

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

void init(){    for (int i = 0; i < n; i++) st[i][0] = a[i];    for (int j = 1; (1 << j) <= n; j++){        for (int i = 0; i + (1 << j) - 1 < n; i++){            st[i][j] = min(st[i + (1 << (j-1))][j - 1], st[i][j - 1]);        }    }}inline int query(int l, int r){    int len = r - l + 1;    int k = 0;    while ((1 << (k + 1)) <= len) k++;    return min(st[l][k], st[r - (1 << k) + 1][k]);}

 

 

二维:

定义dp(i, j, k, L)表示以(i,j)为左上角,宽度为(2^k, 2^L)的区间内的某个数值

int dp[maxn][maxn][8][8], dp2[maxn][maxn][8][8];void init_st(){    for (int i = 0; (1 << i) <= n; i++){        for (int j = 0; (1 << j) <= n; j++){            if (i == 0 && j == 0) continue;            for (int x = 1; x + (1 << i) - 1 <= n; x++){                for (int y = 1; y + (1 << j) - 1 <= n; y++){                    if (i == 0) {                        dp[x][y][i][j] = min(dp[x][y][i][j - 1], dp[x][y + (1 << (j - 1))][i][j - 1]);                        dp2[x][y][i][j] = max(dp2[x][y][i][j - 1], dp2[x][y + (1 << (j - 1))][i][j - 1]);                    }                    else {                        dp[x][y][i][j] = min(dp[x][y][i - 1][j], dp[x + (1 << (i - 1))][y][i - 1][j]);                        dp2[x][y][i][j] = max(dp2[x][y][i - 1][j], dp2[x + (1 << (i - 1))][y][i - 1][j]);                    }                }            }        }    }}int query(int x, int y, int X, int Y){    int maxi = 0, mini = 1e8;    int k1 = 0, k2 = 0;    while (1 << (1 + k1) <= X - x) k1++;    while (1 << (1 + k2) <= Y - y) k2++;    maxi = max(maxi, max(dp2[x][y][k1][k2], dp2[X - (1 << k1) + 1][y][k1][k2]));    maxi = max(maxi, max(dp2[x][Y - (1 << k2) + 1][k1][k2], dp2[X - (1 << k1) + 1][Y - (1 << k2) + 1][k1][k2]));    mini = min(mini, min(dp[x][y][k1][k2], dp[X - (1 << k1) + 1][y][k1][k2]));    mini = min(mini, min(dp[x][Y - (1 << k2) + 1][k1][k2], dp[X - (1 << k1) + 1][Y - (1 << k2) + 1][k1][k2]));    //printf("maxi = %d mini = %d\n", maxi, mini);    return maxi - mini;}

 

转载于:https://www.cnblogs.com/heimao5027/p/5899714.html

你可能感兴趣的文章
折纸带
查看>>
真实世界的Windows Azure:使用Windows Azure社交游戏开发商享有更低的成本和改进的扩展性...
查看>>
云时代的海外扩张
查看>>
hdu1078 记忆化搜索
查看>>
2017 清北济南考前刷题Day 3 afternoon
查看>>
洛谷P2326 AKN’s PPAP
查看>>
WERKZEUG之WSGI阅读笔记
查看>>
一个初学者C#编写帐号密码保存软件的思考过程
查看>>
【软件解决】解决VS环境中出现虚线问题
查看>>
laravel 实现增 与查
查看>>
一种排序
查看>>
Linux实战教学笔记44:NoSQL数据库开篇之应用指南
查看>>
springmvc(2)处理器设配器和映射器
查看>>
PAT 1003
查看>>
switch gnome-terminal tabs
查看>>
怎样理解Functor与Monad
查看>>
DRF教程4-视图集和路由类
查看>>
javascript向上滚动(放上鼠标就停)
查看>>
python的编码问题
查看>>
获取下拉框的值
查看>>