RMQ题集+模板 hdu 2888+3486+3183 范围最小值 范围最大值

2015广东工业大学新生赛 总结+部分题解 1.心态很重要。不能以OJ垃圾来推脱比赛。大家在同一个垃圾平台,比赛仍然是公平的。但行好事莫问前程。 2.多在纸上写多推导。 B题: A 和 B 的最小公倍数 为 C*K 已知 A C 求B的个数。(A能整除C) 起初以为K是当作变量来做,但是很明显,如果K当作变量那么显然B的个数是无数个。 因为任意C*K,B都可以等于C*K. 所以,显然K要当作常量,那么K是多少其实是无所谓 阅读详情

RMQ即范围最小值问题(或最大值)

先给上Sparse-Table算法 模板

void RMQ_make()
{
    int i,j;
    for(j = 1; (1<<j)<=n; ++j)
    {
        for(i = 0; i + (1<<j) - 1 < n; ++i)
            d[i][j] = max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
    }
}
int RMQ(int L, int R)
{
    int k = 0;
    while((1<<(k+1)) <= R-L+1) ++k;
    return max(d[L][k],d[R-(1<<k)+1][k]);
}

hdu 3183 有很多做法,我用贪心写的,需要RMQ的代码可以百度上搜到。

hdu 3486 枚举选择的人数m。有些人想用二分,必须注意,这个总分sum和选择的人数不是线性递增的关系。因此必须枚举。

hdu 2888 二维的RMQ,细节比较多,有点麻烦。

代码:

//HDU 3183
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#define MS(x,y) memset(x,y,sizeof(x))
#define pi acos(-1.0)
using namespace std;
void fre(){freopen("t.txt","r",stdin);}
typedef long long LL;
typedef unsigned long long ULL;
const int MOD = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int MAXN = 4*(1e5)+1;
const int eps = -(1<<30);

int main()
{
    //fre();
    char n[1005];
    int m,i,j,len,cnt,flag;
    while(~scanf("%s%d",n,&m))
    {
        len = strlen(n);
        cnt = 0;
        if(m >= len){printf("0\n");continue;}
        while(cnt < m)
        {
            flag = 0;
            for(i = 0; i < len-1 ;++i)
            {
                while(n[i]==0)++i;
                j = i+1;
                while(n[j]==0)++j;
                if(n[i]>n[j]) {n[i]=0;flag = 1;cnt++;break;}
            }
            if(!flag)break;
        }
        for(i = len-1; i>=0&&cnt<m; --i,++cnt)
        {
            n[i] = 0;
        }
        i = 0;
        while(n[i]==0||n[i]=='0')i++;
        if(i >= len) {printf("0\n");continue;}
        for(; i < len; ++i)
        {
            if(n[i]) printf("%c",n[i]);
        }
        puts("");
    }
}

//HDU 3486
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#define MS(x,y) memset(x,y,sizeof(x))
#define pi acos(-1.0)
using namespace std;
void fre(){freopen("t.txt","r",stdin);}
typedef long long LL;
typedef unsigned long long ULL;
const int MOD = 1e9 + 7;
const int inf = 0x3f3f3f3f;
const int MAXN = 200005;
const int eps = -(1<<30);

int n,m,d[MAXN][22];
void RMQ_make()
{
    int i,j;
    for(j = 1; (1<<j)<=n; ++j)
    {
        for(i = 0; i + (1<<j) - 1 < n; ++i)
            d[i][j] = max(d[i][j-1],d[i+(1<<(j-1))][j-1]);
    }
}
int RMQ(int L, int R)
{
    int k = 0;
    while((1<<(k+1)) < R-L+1) ++k;
    return max(d[L][k],d[R-(1<<k)+1][k]);
}
bool solve(int x)
{
    int i,j,k = n/x;
    LL sum=0;
    for(i = 0; i < x; ++i)
    {
        sum +=RMQ(i*k,(i+1)*k-1);
        if(sum > m)break;
    }
    if(sum > m) return 1;
    else return 0;
}
int main()
{
   // fre();
    int i,j,maxx,sum;
    while(~scanf("%d%d",&n,&m))
    {
        maxx= sum=0;
        if(n<0&&m<0)break;
        for(i = 0; i < n; ++i) //input
        {
            scanf("%d",&d[i][0]);
            sum+=d[i][0];
            if(maxx < d[i][0]) maxx = d[i][0];
        }

        if(sum<=m) {printf("-1\n");continue;}//special judge

        RMQ_make();
        i = m/maxx ;//solve
        if(i==0)i++;
        while(i<n&&!solve(i))++i;
        printf("%d\n",i);
    }
}

//HDU 2888
#include<cstdio>
#include<cstring>
#include<cmath>
#include<string>
#include<queue>
#define MS(x,y) memset(x,y,sizeof(x))
#define pi acos(-1.0)
using namespace std;
void fre(){freopen("t.txt","r",stdin);}
typedef long long LL;
typedef unsigned long long ULL;
const int N = 305;
const int INF = 0x3f3f3f3f;
const int M = 11;
const int eps = -(1<<30);

int row,col;
int __pow[M];
int dp[N][M][N][M];
int a[N][N];

bool check(int res , int r1 , int c1 , int r2 , int c2)
{
    if(res == a[r1][c1] || res == a[r1][c2] || res == a[r2][c1] || res == a[r2][c2]) return true;
    return false;
}

inline int max(int aa ,int bb ,int cc ,int dd)
{
    int res = -INF;
    res = aa > res ? aa : res;
    res = bb > res ? bb : res;
    res = cc > res ? cc : res;
    res = dd > res ? dd : res;
    return res;
}

void ST()
{
    int KR = (int)(log((double)row) / log(2.0));
    int KC = (int)(log((double)col) / log(2.0));
    for(int i=1; i<=row; i++)            //初始化dp[i][0][j][0]
        for(int j=1; j<=col; j++)
            dp[i][0][j][0] = a[i][j];
    for(int i=1; i<=row; i++)           //初始化dp[i][0][j][p]
        for(int pc=1; pc<=KC; pc++)
            for(int j=1; j+__pow[pc]-1<=col; j++)
            {
                int kc = j + __pow[pc-1];
                int x = dp[i][0][j][pc-1] , y = dp[i][0][kc][pc-1];
                dp[i][0][j][pc] = x > y ? x : y;
            }
    for(int j=1; j<=col; j++)           //初始化dp[i][p][j][0]
        for(int pr=1; pr<=KR; pr++)
            for(int i=1; i+__pow[pr]-1<=row; i++)
            {
                int kr = i + __pow[pr-1];
                int x = dp[i][pr-1][j][0] , y = dp[kr][pr-1][j][0];
                dp[i][pr][j][0] = x > y ? x : y;
            }
    for(int pr=1; pr<=KR; pr++)
        for(int pc=1; pc<=KC; pc++)
            for(int i=1; i+__pow[pr]-1<=row; i++)
                for(int j=1; j+__pow[pc]-1<=col; j++)
                {
                    int kr = i + __pow[pr-1];
                    int kc = j + __pow[pc-1];
                    dp[i][pr][j][pc] = max(dp[i][pr-1][j][pc-1] , dp[i][pr-1][kc][pc-1] , dp[kr][pr-1][j][pc-1] , dp[kr][pr-1][kc][pc-1]);
                }
}

int RMQ(int r1 , int c1 , int r2 , int c2)
{
    int KR = (int)(log((double)(r2-r1+1)) / log(2.0));
    int KC = (int)(log((double)(c2-c1+1)) / log(2.0));
    int kr = r2 - __pow[KR] + 1;
    int kc = c2 - __pow[KC] + 1;
    return max(dp[r1][KR][c1][KC] , dp[r1][KR][kc][KC] , dp[kr][KR][c1][KC] , dp[kr][KR][kc][KC]);
}

int main()
{
    for(int i=0; i<M; i++) __pow[i] = (1<<i);
    while(scanf("%d%d",&row,&col)!=EOF)
    {
        for(int i=1; i<=row; i++)
            for(int j=1; j<=col; j++)
                scanf("%d",&a[i][j]);
        ST();
        int q;
        scanf("%d",&q);
        while(q--)
        {
            int ok = 0,r1,c1,r2,c2;
            scanf("%d%d%d%d",&r1,&c1,&r2,&c2);
            int res = RMQ(r1,c1,r2,c2);
            printf("%d ",res);
            if(check(res ,r1,c1,r2,c2)) printf("yes\n");
            else                        printf("no\n");
        }
    }
    return 0;
}


九余数定理及证明 hdu 1163 九余数定理: 一个数对九取余后的结果称为九余数。 一个数的各位数字之和想加后得到的 证明借鉴了网络上的证明,加以修改: 首先证明前有两个基本需要知道的规律  1.和的模 等于 模的和再取模 如:(15+7)%3 = (15%3+7%3)%3 逆运算亦可 2.积的模 等于 模的积再取模 如:(15*7)%3 = (15%3 * 7%3) %3 逆运算亦可 阅读详情

相关推荐

01串出现奇数个1的方案数 2016四川省赛 Odd Discount

题目链接:https://acm.bnu.edu.cn/v3/problem_show.php?pid=52300先证明结论,后说题目; 结论1:长度为n的01序列出现奇数个1的方案为总方案的1/2(即出现奇数个1和出现偶数个1的方案数相等) 证明:(数学归纳法) n=1的情况,显然成立; 如果n=i成立:那么再额外增加1个1,奇数个1和偶数个1的方案会对调;再额外增加1个0,奇数个1和偶数

QZQ 2265

RMQ专题练习

1.POJ 3264      Balanced Lineup 赤裸裸的RMQ,直接构造,然后查询 2.POJ 3368     Frequent values 这题挺好的,白书上例题,感觉很妙,自己是想不出来的 3.POJ3019    Cornfields 本人用了三维了RMQ,把每行都构造一遍,查询时候按行来找最大最小值 4.HDU 3486  Interviewe 这题有问题

htw 614

AD(AltiumDesigner)封装导入allegro生成allegro封装

AD(AltiumDesigner)封装导入allegro生成allegro封装 貌似PCB的封装问题是一个无尽话题,为了简单我总是想找捷径(主要还是太懒了),因为也是近期才开始学习使用allegro进行PCB设计,在最近的一个设计中,很多器件封装allegro中都没有,一个一个画感觉很费时间,但是在AD(AltiumDesigner)的封装库中是有的,于是便想着AD的封装库能不能倒入到alleg...

yangh2560的博客 2万+

第四部分 数据结构 (第三章 RMQ问题)例题

例题一:数列区间 link #include <cstdio> #include <iostream> using namespace std; const int N = 1e6 + 10; int n, m, a, x, y, f[N][30], log[N], k; void get_log() { int now = 2, noww = 2, i; for(int i = 1; noww * 2 <= N; i++) { while(now <

蒟蒻こんにゃく 352

【Dify精讲】第2章:后端服务架构深度剖析

Dify后端采用Flask应用工厂模式实现模块化开发,通过蓝图架构将API分为控制台、Web应用和服务接口三大模块。其设计亮点包括:1) 应用工厂模式支持多环境配置和独立测试;2) 蓝图分层管理实现API模块化,各模块职责清晰;3) 严格遵循RESTful原则设计API接口;4) 使用Flask-RESTful扩展简化API开发。这种架构既保持了Flask的灵活性,又实现了企业级应用的可维护性,是Flask项目架构的优秀实践案例。

wiyi9891的专栏 2126

手把手教你复现IEEE 2025高光谱图像盲超分算法DBSR(附开源代码与避坑指南)

本文详细介绍了如何从零复现IEEE 2025高光谱图像盲超分算法DBSR,包括环境配置、数据预处理、核心模块解析、训练策略及常见问题解决方案。特别针对开源代码中的关键步骤和潜在问题提供了实用指南,帮助研究者和开发者高效实现Deep blind super-resolution技术,适用于遥感、医疗等领域的图像增强应用。

weixin_42524708的博客 413

【专题】用ST表解决RMQ刷题总结

【专题】用ST表解决RMQ刷题总结 看了一下上次写博客居然是好久以前的事了(我真是老懒狗了 ) 开门见山,直接放专题链接和代码 kuangbin rmq专题 这个contest里面一共十道题但是实际上有2道dp的题混入其中,还有一道水题不用rmq就能做(不过做上头了也能强行rmq),还有一道HYSBZ上面的题因为懒就没有做。。。 然后就剩下6道题了,一道一道按难易和类型(一维rmq/二维rmq)摆代码 一维rmq(4道): POJ3264 题意略。。。就是rmq板子题,有手就行 //POJ3264 #inc

weixin_46286993的博客 265

如何在Windows上安装Node-RED?

Node-RED 是一款基于流程的可视化编程工具,专注于物联网(IoT)和自动化应用的快速开发,其核心特点是通过拖拽节点构建数据流网络,实现低代码/无代码编程。

猿小白的博客 1171

RMQ模板题 南阳oj 119

这是一道最基础的RMQ算法模板题,如果刚刚学会该算法,可以拿这个题练练手。 #include #include #define max(x,y) x>y?x:y #define min(x,y) x<y?x:y int M,m; int maxn[100001][50]; int minn[100001][50]; void pre(int n) { int i,j; for(i=1;(

ccsu_cat 447

手把手教你学Simulink--基于飞行控制与稳定性的场景实例:固定翼无人机的自动起飞与降落控制

本文介绍了使用Simulink对固定翼无人机自动起飞与降落控制系统进行建模与仿真的完整流程。首先构建了包含飞行器动力学模型、控制系统、环境模拟等模块的系统结构,详细阐述了简化动力学方程的推导和实现。重点讲解了PID控制器设计,包括起飞阶段的速度控制和降落阶段的高度控制策略。通过添加环境干扰和输入信号,建立了完整的仿真模型,并利用输出显示模块评估系统性能。该实例为无人机自主控制系统的开发提供了有效的仿真验证方法,有助于优化参数提高飞行稳定性。

MHD0815的博客 4311

SOC估算方法之(OCV-SOC+安时积分法)

此方法主要参考。

m0_61973119的博客 936

hdu3183__A Magic Lamp(RMQ模板题)

A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2298    Accepted Submission(s): 909 Problem Description Kiki likes tra

Han_zhenyu的博客 469

一次携程酒店 phantom-token 逆向实战复盘(附python纯算)

摘要 本文介绍了通过分析携程酒店列表页面的数据接口,使用Python实现抓取的方法。主要内容包括: 目标站点为携程酒店列表页,通过开发者工具发现关键接口fetchHotelList 将浏览器请求转换为Python代码,包含请求头(headers)、Cookies和POST数据 提供完整的请求示例代码,包含日期参数、城市ID等必要信息 特别声明仅供学习交流使用,禁止商业用途 展示了如何获取酒店列表数据,包括排序筛选等参数设置 该方法可用于研究酒店数据采集,但需要注意遵守网站使用条款。

自成背后的博客 3024

RMQ学习总结(附带简单例题)

RMQ (Range Minimum/Maximum Query)问题 含义:对于长度为n的数列A,回答若干询问RMQ(A,i,j)(i,j,返回数列A中下标在i,j里的最小(大)值,也就是说,RMQ问题是指求区间最值的问题。 时间复杂度:预处理时间复杂度O(n*log(n)),查询O(1) 基础:dp F[i][j]表示从第i位起,2^j个数中的最值。 那么dp的初值是什么?  显然

Cynthia_wjyi 3518

【异常】Codybuddy Error Code: 14003 too many requests 限流报错问题排查与解决指南

14003报错本质为服务端限流拦截,并非账号封禁或程序致命故障,90%以上的场景可通过等待冷却+规范使用行为解决。通过本文的排查步骤,可快速恢复工具使用,同时规避后续重复触发该问题。

奶爸的编程之路,也就一周冷个三天 1253

老版QQ原生表情gif动态

这是老版的QQ表情,不过全是动态的的,Windows照片查看器是不会动的,可以右击用浏览器打开查看,再说一遍是老版的,只是分享给宁愿用老版也要动态的人。

一维RMQ问题题集

书本配套OJ 本校OJ ST表使用说明: 常用于离线问题,或当作辅助数据结构,查询时间非常优秀,O(1) 二维st表也很好实现,不过本题集中未涉及 st表内也可以维护的是下标而非值,在某些时候很有用 数列区间最大值 题意简述 输入一串数字,给你 M 个询问,每次询问就给你两个数字 X,Y,要求你说出 X 到 Y 这段区间内的最大数。 解题思路 st表模板题。 代码示例 #include<...

帅比王的博客 607

LinePhone3.2.7(android端最新版本) sip客户端

SIP客户端For android:LinePhone3.2.7(最新版本),官网地址:http://www.linphone.org/

RMQ模板题

给出一个有N个数的序列,编号0 - N - 1。进行Q次查询,查询编号i至j的所有数中,最大的数是多少。 例如: 1 7 6 3 1。i = 1, j = 3,对应的数为7 6 3,最大的数为7。(该问题也被称为RMQ问题) Input 第1行:1个数N,表示序列的长度。(2 第2 - N + 1行:每行1个数,对应序列中的元素。(0 i 第N + 2行:1个数Q,表示查询的数量

Lesroad 409

win10 跳过U8环境检测的IE WebControls.rar

win10 安装u8的时候 提示IE WebControls 不通过,这个工具可以欺骗u8的检查。 跳过U8环境检测的IE WebControls。提示导入失败后,重新检测通过。

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

HDU5443 The Water Problem -RMQ模板题

题目链接: http://acm.hdu.edu.cn/showproblem.php?pid=5443 The Water Problem Time Limit: 1500/1000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 3387    Accepted Su...

Source_Roc 361

hdu1003 java_hdu3183__A Magic Lamp(RMQ模板题)

A Magic Lamp Time Limit: 2000/1000 MS (Java/Others)Memory Limit: 32768/32768 K (Java/Others) Total Submission(s): 2573Accepted Submission(s): 1003 Problem Description Kiki likes traveling. One...

weixin_39790686的博客 135

RMQ模板hdu 5452

题意:有一棵生成树,有n个点,给出m-n+1条边,截断一条生成树上的边后,再截断至少多少条边才能使图不连通, 问截断总边数?解题思路:  因为只能在生成树上截断一条边(u, v),所以只需要统计以v为根节点的子生成树里的节点与子生成树外的节点的边数就可以了。对于新加入的边(u’, v’)来说,只影响以LCA(u, v)为根节点的子树里面的节点。统计所有答案,扫一遍输出最小即可   dp值记录的是以

yp_2013的博客 450

HDU - 3374 String Problem (最大最小值表示法+kmp)

https://vjudge.net/contest/189927#problem/M 题意:字符串的第一个会变到最后一个,之后有一个顺序,第一次变化是第一名,第二次变化是第二名,然后问你字典序最小和字典序最大的串在第几名,它出现的次数是多少 思路:出现的次数好算,因为一个串出现的次数就是len/(len-nex[len])吗,现在就是看他是第几位比较难,其实也不难就是看一个字符在字符

wjmwsgj的博客 357

最大团 极大团 Bron–Kerbosch算法 poj 2989

昨日老刘开了最大团专题后,起初以为挺简单,后来发现有点麻烦。能用的资料又很少。分享一下学习的东西 以poj 2989为例,题意是求 不同极大团的数量 要用Bron–Kerbosch算法 首先是最朴素的伪代码,没有任何剪枝(来自维基百科)https://en.wikipedia.org/wiki/Bron%E2%80%93Kerbosch_algorithm Bro

QZQ 9355

Educational Codeforces Round 8 D - Magic Numbers 数位DP

题意很简单,偶数位为d,奇数位不为d,且能被m整除的数,叫d-magic,给定d,m,a,b,求在[a,b]上d-magic的个数。 注意 1 既是 0-magic 又是 2/3/4/5/6/7/8/9-magic  还有值得注意的是,给定的a,b 数位相同。 一开始没用到这个条件,写得挺麻烦~ #include #include #include #include #include #in

QZQ 8373

二分图 最小覆盖数 = 最大匹配数、最大独立集 = 总数-最小覆盖集 证明 hdu 1068

二分图有两个定理:最小覆盖数=最大匹配数、最大独立集=总数-最小覆盖集 。 这里来给出证明(如果还不懂匈牙利算法,请先看之前写的一篇)匈牙利算法链接 几个基本定义: 最小覆盖:即在所有顶点中选择最少的顶点来覆盖所有的边。 最大匹配:二分图左右两个点集中,选择有边相连的两个匹配成一对(每个点只能匹配一次),所能达到的最大匹配数。 最大独立集:集合中的任何两个点都不直接相连。 最小覆盖数=

QZQ 5814

hdu 5304 基尔霍夫矩阵

关于基尔霍夫矩阵: *算法引入: *给定一个无向图G,求它生成树的个数t(G); * *算法思想: *(1)G的度数矩阵D[G]是一个n*n的矩阵,并且满足:当i≠j时,dij=0;当i=j时,dij等于vi的度数; *(2)G的邻接矩阵A[G]是一个n*n的矩阵,并且满足:如果vi,vj之间有边直接相连,则aij=1,否则为0; *定义图G的Kirchhoff矩阵C[G

QZQ 2593

hdu 2089 数位DP初探

数位DP 优秀的 教学 :http://wenku.baidu.com/link?url=o3ER_gVCyB0qcKthM-Y8vPtAGZ_u5bzOu_gUCUhPcXC6YfaSDgtBSXNEEvvGvSzyuDE9TULcPNsDrRd9IUtQVHeKUVrnPUjyfWjCly_J7Xq #include #include #include #include #defin

QZQ 2314
上一篇: hdu 2234+1560 IDA*
下一篇: 题集+模板:线段树[1]点修改 区间查找 hdu 2795+1394+1754+4302
QZQmmmm
博客等级 码龄11年 77粉丝 110原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值