博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[USACO07JAN]Balanced Lineup
阅读量:6948 次
发布时间:2019-06-27

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

OJ题号:

洛谷2880

思路1:

线段树维护区间最大最小值。

1 #include
2 #include
3 #include
4 #include
5 inline int getint() { 6 char ch; 7 bool sgn=false; 8 while(!isdigit(ch=getchar())) if(ch=='-') sgn=true; 9 int x=ch^'0';10 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');11 return sgn?-x:x;12 }13 const int inf=0x7fffffff;14 const int N=50001;15 class SegmentTree {16 #define _left <<117 #define _right <<1|118 private:19 int max[N<<2],min[N<<2];20 void push_up(const int p) {21 max[p]=std::max(max[p _left],max[p _right]);22 min[p]=std::min(min[p _left],min[p _right]);23 }24 public:25 void build(const int p,const int b,const int e) {26 if(b==e) {27 max[p]=min[p]=getint();28 return;29 }30 int mid=(b+e)>>1;31 build(p _left,b,mid);32 build(p _right,mid+1,e);33 push_up(p);34 }35 std::pair
query(const int p,const int b,const int e,const int l,const int r) {36 if((b==l)&&(e==r)) {37 return std::make_pair(max[p],min[p]);38 }39 int mid=(b+e)>>1;40 int max=0,min=inf;41 if(l<=mid) {42 std::pair
tmp=query(p _left,b,mid,l,std::min(mid,r));43 max=std::max(max,tmp.first);44 min=std::min(min,tmp.second);45 }46 if(r>mid) {47 std::pair
tmp=query(p _right,mid+1,e,std::max(mid+1,l),r);48 max=std::max(max,tmp.first);49 min=std::min(min,tmp.second);50 }51 return std::make_pair(max,min);52 }53 };54 SegmentTree t;55 int main() {56 int n=getint(),m=getint();57 t.build(1,1,n);58 while(m--) {59 int l=getint(),r=getint();60 std::pair
tmp=t.query(1,1,n,l,r);61 printf("%d\n",tmp.first-tmp.second);62 }63 return 0;64 }

 思路2:

倍增法求RMQ。

1 #include
2 #include
3 #include
4 #include
5 inline int getint() { 6 char ch; 7 while(!isdigit(ch=getchar())); 8 int x=ch^'0'; 9 while(isdigit(ch=getchar())) x=(((x<<2)+x)<<1)+(ch^'0');10 return x;11 }12 const int N=50001,logN=log2(N)+1;13 int min[N][logN],max[N][logN];14 int main() {15 int n=getint(),m=getint();16 for(int i=1;i<=n;i++) {17 min[i][0]=max[i][0]=getint();18 }19 for(int j=1;j<=log2(n);j++) {20 for(int i=1;i<=n-(1<

 

转载于:https://www.cnblogs.com/skylee03/p/7396805.html

你可能感兴趣的文章
公司机器很老,有些可以用U盘重新做系统。。有些则。。。
查看>>
python获取按字典值排序的列表
查看>>
X3-02 gprs 设置
查看>>
单例模式
查看>>
Exchange 2010 禁用通讯组后,如何再启用。
查看>>
从hiredis使用出core谈谈redis多线程的使用
查看>>
leetcode解题报告:198 House Robber
查看>>
Spring @Value 无法获取到properties文件中的值
查看>>
Win8 采用受信任启动保障用户安全
查看>>
linux 安装 jdk bin
查看>>
查看计算机信息
查看>>
编程基础(哑元、内联)
查看>>
hadoop2.8的namenode节点用jps发现没有jobtracker 和tasktracke
查看>>
history 显示时间
查看>>
视频帧率对人眼主观感受的影响 2
查看>>
postfix+dovecot+foxmail虚拟用户配置
查看>>
【中国互联网不眠夜】Struts2漏洞百出,OneRASP鼎力相助
查看>>
C语言之main函数传参
查看>>
Vuex + axios 发送请求
查看>>
Linux网络编程-TCP头部与UDP头部结构对比
查看>>