P1816 忠诚

题目描述

老管家是一个聪明能干的人。他为财主工作了整整10年,财主为了让自已账目更加清楚。要求管家每天记k次账,由于 管家聪明能干,因而管家总是让财主十分满意。但是由于一些人的挑拨,财主还是对管家产生了怀疑。于是他决定用一种特别的方法来判断管家的忠诚,他把每次的 账目按1,2,3…编号,然后不定时的问管家问题,问题是这样的:在a到b号账中最少的一笔是多少?为了让管家没时间作假他总是一次问多个问题。

输入输出格式

输入格式:

输入中第一行有两个数m,n表示有m(m<=100000)笔账,n表示有n个问题,n<=100000。

第二行为m个数,分别是账目的钱数

后面n行分别是n个问题,每行有2个数字说明开始结束的账目编号。

输出格式:

输出文件中为每个问题的答案。具体查看样例。

输入输出样例

输入样例#1:

10 3
1 2 3 4 5 6 7 8 9 10
2 7
3 9
1 10
输出样例#1:

2 3 1

被线段树骗了进来。。。线段树写RMQ太水了,树状数组写RMQ更水,于是顺手温习了一遍ST表。

stlist[i][j]表示区间[i, i + 1 << j - 1]内的极值
初始状态:stlist[i][0] = num[i]
令M = log2 (n),n为元素个数 最好写成循环,打个表。这里偷懒没有打表,小心被无比黑心的出题人卡常(不过这种常数也太难卡了吧。。。)
状态转移方程:stlist[i][j] = max/min{stlist[i][j - 1], stlist[i + 1 <<(j - 1)][j - 1]} 算一算,区间分别是[i, i + 1 << (j - 1) - 1]和[i + 1 << (j - 1), i + 1 << j - 1],
合起来正好是stlist[i][j]表示的区间。这个比较好记,记住stlist[i][j - 1],以及stlist[x][j - 1],区间连续性,x很容易推出来 查询的时候,令M = log2(r - l + 1),即(r - l + 1)/2 < 2^M <= r - l + 1(区间长度)
查询区间[l,r]: max/min{stlist[l][M], stlist[r - 1 << M + 1][M]} 区间正好是[l, l + 1 << M - 1],[r - (1 << M - 1), r]
只需证 l + 2^M - 1 > r - 2^M + 1 + 1 即证2^M > (r - l + 1)/2 + 1 显然
我本来证不出来,拿去找MOdalao,换了三次不等式全是错的,后来发现我L和1混了然后少加了一个1,改成正确的之后,秒解这个弱智不等式。。
上代码
 #include <bits/stdc++.h>
const int INF = 0x3f3f3f3f;
const int MAXN = + ;
inline void read(int &x){
x = ;char ch = getchar();char c = ch;
while(ch > '' || ch < '')c = ch, ch = getchar();
while(ch <= '' && ch >= '')x = x * + ch - '',ch = getchar();
if(c == '-') x = -x;
}
inline int min(int a,int b){return a > b ? b : a;}
inline int max(int a,int b){return a > b ? a : b;}
int stlist[MAXN][],n,m;
void stwork(){
int M = ;
while( << (M + ) <= n)M ++;
for(int i = ;i <= M;i ++){
for(int j = n;j > ;j --){
stlist[j][i] = stlist[j][i - ];
if(j + ( << (i - )) <= n)stlist[j][i] = min(stlist[j][i], stlist[j + ( << (i - ))][i - ]);
}
}
}
int stfind(int l, int r){
int M = ;
while( << (M + ) <= (r - l + ))M ++;
return min(stlist[l][M], stlist[r - ( << M) + ][M]);//[l, l + 2 ^ M - 1],[r - ( 2 ^ M - 1), r] ,
}
int main(){
read(n);read(m);
for(int i = ;i <= n;i ++)read(stlist[i][]);
stwork();
for(int i = ;i <= m;i ++)
{
int tmp1,tmp2;
read(tmp1);read(tmp2);
printf("%d ", stfind(tmp1, tmp2));
}
return ;
}

【模板】ST表 洛谷P1816 忠诚的更多相关文章

  1. 洛谷P1816 忠诚 题解

    洛谷P1816 忠诚 题解 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人 ...

  2. 洛谷 P1816 忠诚 题解

    P1816 忠诚 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财 ...

  3. 洛谷 P1816 忠诚

    https://www.luogu.org/problemnew/show/1816 st表模板 #include<cstdio> #include<algorithm> us ...

  4. Sequence(ST表)(洛谷P2048)

    超级钢琴 知识储备 在做这道题前,我们先要了解一下ST表(一种离线求区间最值的方法) ST表使用DP实现的,其查询复杂度为O(1). 那么我们怎么用DP实现呢?? 首先,我们设立一个状态f[i][j] ...

  5. 洛谷P1816 忠诚

    P1816 忠诚 569通过 1.5K提交 题目提供者该用户不存在 标签云端 难度普及+/提高 时空限制1s / 128MB 提交  讨论  题解 最新讨论更多讨论 主席树的常数貌似大于线段树… TL ...

  6. 洛谷 P1816 忠诚 ST函数

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  7. 洛谷 P1816 忠诚题解

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  8. 【洛谷P1816 忠诚】线段树

    题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记k次账,由于管家聪明能干,因而管家总是让财主十分满意.但是由于一些人的挑拨,财主还是对管家产生了 ...

  9. 洛谷——P1816 忠诚

    https://www.luogu.org/problem/show?pid=1816#sub 题目描述 老管家是一个聪明能干的人.他为财主工作了整整10年,财主为了让自已账目更加清楚.要求管家每天记 ...

随机推荐

  1. 根据url提取网站域名的方法小结

    前言:最近使用到了他人总结的一个基础类库.查看了下源码,发现String帮助类的一个辅助方法不是很严谨,重构之. 1.原来程序的写法 1 2 3 4 5 6 7 8 9 10 11 12 13 14 ...

  2. MySQL Server Logs

    日志记录存储方式 #日志记录存储方式 mysql> show variables like 'log_output'; mysql> set global log_output='FILE ...

  3. hadoop settings

    ssh-keygen -t rsa -P '' -f ~/.ssh/id_rsa cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys expor ...

  4. error C2440 “static_cast” 无法从“void (__thiscall C* )(void)...

    1.VC6中,说可以把函数在头文件中定义为:afx_msg void OnProgress()这样 但是在VS2005及以上,要求很严格,必须函数返回值为LRESULT类型,所以在VS2005及以上, ...

  5. python 拷贝某个文件到另一个目录下

    python的shutil包含有很多文件拷贝的函数,各种各样的,要实现我文章题目的目的,使用shutil.copy函数即可 shutil.copy(文件的路径,另一个目录)

  6. [POI2017]Sabota【观察+树形Dp】

    Online Judge:Bzoj4726 Label:观察,树形Dp,水题 题目描述 某个公司有n个人, 上下级关系构成了一个有根树.公司中出了个叛徒(这个人不知道是谁). 对于一个人, 如果他下属 ...

  7. /etc/sysctl.conf配置文件

    # vi /etc/sysctl.conf # add by digoal.zhou fs.aio-max-nr = fs. kernel.core_pattern= /data01/corefile ...

  8. csp-s模拟47 Emotional Flutter,Endless Fantasy题解

    题面:https://www.cnblogs.com/Juve/articles/11558523.html A:Emotional Flutter 如果起点确定,那么我们后面走的点都是固定的,及mo ...

  9. utils01_git的使用

    1.git和的安装 下载git https://www.git-scm.com/download/ 完全下一步安装git和TortoiseGit和TortoiseGit的汉化包 2.右击选中小乌龟点击 ...

  10. Pycharm 添加第三方库

    坏境:pycharm专业版 点击:file ——>setting ——>Project:python source code ——>Project interpreter ——> ...