Frequent values
来源:互联网 发布:java中重载的用法 编辑:程序博客网 时间:2024/05/16 03:00
http://poj.org/problem?id=3368
#include <cstdio>#include <cstring>#include <algorithm>#include <vector>#include <cmath>using namespace std;const int maxn=100005;int f[maxn][18];int a[maxn],l[maxn],r[maxn],num[maxn];int v,ans;void st(vector<int>&shu){int k;k=(int)((log(1.0*shu.size()))/log(2.0));for(int i=0;i<shu.size();i++)f[i][0]=shu[i];for(int j=1;j<=k;j++){for(int i=0;i+(1<<j)-1<shu.size();i++){f[i][j]=max(f[i][j-1],f[i+(1<<(j-1))][j-1]);}}}int sou(int zuo,int you){int k;k=(int)((log(1.0*(you-zuo+1)))/log(2.0));int ans= max(f[zuo][k],f[you-(1<<k)+1][k]);return ans;}int main(int argc, char *argv[]){int n,q;while(scanf("%d",&n)==1&&n){scanf("%d",&q);for(int i=0;i<n;i++)scanf("%d",&a[i]);int be;a[n]=a[n-1]+1;vector<int> shu;for(int i=0;i<=n;i++)if(i==0||a[i]>a[i-1]){if(i>0){shu.push_back(i-be);for(int j=be;j<i;j++){num[j]=shu.size()-1;l[j]=be; r[j]=i-1;}}be=i;}st(shu);int zuo,you;while(q--){scanf("%d%d",&zuo,&you);zuo--; you--;if(num[zuo]==num[you]){ans=you-zuo+1;}else{ans=max(r[zuo]-zuo+1,you-l[you]+1);if(num[zuo]+1<num[you])ans=max(ans,sou(num[zuo]+1,num[you]-1));}printf("%d\n",ans);}}return 0;}
0 0
- Frequent values
- Frequent values
- Frequent values
- PKU 3368 Frequent values
- POJ 3368 Frequent values
- [RMQ]Pku3368-Frequent values
- PKU 3368 Frequent values
- Pku 3368 Frequent Values
- poj3368 Frequent values
- poj 3368 Frequent values
- POJ 3368 Frequent Values
- poj 3368 Frequent values
- E - Frequent values
- poj 3368 Frequent values
- UVa 11235 - Frequent values
- poj 3368 Frequent values
- uva--11235--Frequent values
- POJ-3368-Frequent values
- C++ std::string用法总结
- POJ 2828 Buy Tickets; BOJ 494 Study sister's barbarian
- 06-3. 单词长度(15)
- Android自定义点击效果的ImageView
- 防止全局变量重复定义
- Frequent values
- DFS------Lake Counting
- python网页显示
- Objective-C语法之字符串那些事
- Android Activity总结
- 2014.8.17 周日-servlet对象
- Notification通知
- SIM900/SIM900A 模块实现收发短信,打电话
- Android之XML资源访问