cf#333 (Div. 2) 区间最大最小值(RMQ || STL_set)
来源:互联网 发布:大足区广电网络 编辑:程序博客网 时间:2024/06/05 22:35
题目大意:n个数的序列,问最长的区间,区间内最大的数和最小的数差小于等于1
Sample test(s)
input
51 2 3 3 2
output
4
input
115 4 5 5 6 7 8 8 8 7 6
output
5
#include<iostream>#include<cstring>#include<algorithm>#include<cmath>using namespace std;int dp[100100][20],dp2[100100][20],s[100100];int n;void RMQ_init(){ for(int i=1; i<=n; i++) { dp[i][0]=s[i]; dp2[i][0]=s[i];} for(int j=1; (1<<j)<=n; j++) for(int i=1;i+(1<<j)-1<=n;i++) { dp[i][j]=max(dp[i][j-1],dp[i+(1<<(j-1))][j-1]); dp2[i][j]=min(dp2[i][j-1],dp2[i+(1<<(j-1))][j-1]); }}int Max(int L,int R){ int k=0; k=log2(R-L+1); return max(dp[L][k],dp[R-(1<<k)+1][k]);}int Min(int L,int R){ int k=0; k=log2(R-L+1); return min(dp2[L][k],dp2[R-(1<<k)+1][k]);}int main(){int ans,i,j,l,r;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&s[i]);RMQ_init();l=1;r=1;ans=0;while(r<=n) {while(r<=n && Max(l,r)-Min(l,r)<=1) r++;ans=max(ans,r-l);while(Max(l,r)-Min(l,r)>1&&l<r) l++;}printf("%d\n",ans);return 0;}
#include<bits/stdc++.h>using namespace std;multiset<int>ss;multiset<int>::iterator it1,it2,it3;const int maxn=1e5+100;int a[maxn];int main(){int n,i,j,ans,p;int mx,mi;scanf("%d",&n);for(i=1;i<=n;i++) scanf("%d",&a[i]);p=1;mx=mi=a[1];ans=0;ss.insert(a[1]);for(i=2;i<=n;i++) {mx=max(mx,a[i]);mi=min(mi,a[i]);if(mx-mi<=1) {ss.insert(a[i]);ans=max(ans,(int)ss.size());continue;}ss.insert(a[i]);while(ss.size()>0&&mx-mi>1) {it1=ss.find(a[p++]);ss.erase(it1);it2=ss.begin();it3=ss.end();it3--;mi=*it2;mx=*it3;}ans=max(ans,(int)ss.size());}printf("%d\n",ans);return 0;}
0 0
- cf#333 (Div. 2) 区间最大最小值(RMQ || STL_set)
- RMQ CF Approximating a Constant Range 区间最大最小值问题
- poj3264线段树---区间最大最小值查询(RMQ)
- poj2823------线段树-------求区间最大最小值(RMQ)
- RMQ算法 快速求区间最大最小值
- RMQ板子 求区间最大最小值
- RMQ问题(区间最小值)
- 区间最小值 RMQ
- 区间最小值 RMQ算法
- POJ 3264 ST表(RMQ问题:查询区间最大最小值)
- CF 52C Circular RMQ(区间更新,区间询问)
- UVA 1619 - Feel Good(dp 求区间最小值 附加RMQ)(区间最小值优化)
- NEFU 1268 区间最小值求和(单调队列||RMQ)
- 51nod1174区间最大数(RMQ)
- POJ3264 区间最大最小值
- 【POJ 3264】【RMQ 或者线段树】Balanced Lineup 【查询区间内最大最小值的差】
- RMQ -- 不修改的权值的求区间最大最小值
- CF#52 C Circular RMQ (线段树区间更新)
- 排序——高效排序算法
- 虚拟机VirtualBox中Ubuntu无法全屏解决方法
- Life Study
- 黑马程序员——javaSE_面向对象
- linux安装nfs
- cf#333 (Div. 2) 区间最大最小值(RMQ || STL_set)
- IDEA小技巧
- ionic项目页面与路由
- nmap 介绍
- java中String的传参和不可变问题探究
- java中xml json javabean之间的转换
- C++primer plus第六版课后编程练习答案7.8
- Python 编码风格指南中译版(Google SOC)
- 详细介绍一下 BVT