【BZOJ3100】排列
2016-03-18 08:34
344 查看
Description
给定一个长度为n的序列a,选取连续的一段使其为1~k的一个排列。
求k的最大值。
Input
输入的第一行包含一个整数n。接下来n个数描述序列a
Output
输出一个整数表示k的最大值。
Sample Input
5
1 2 3 4 5
Sample Output
5
HINT
100%数据满足:1<=N<=1000000,1 <= ai <=n
Source
如果一个区间内的数是一个1-k的排列的话
一定满足:
1.区间和为len∗(len+1)2\frac {len*(len+1)} 2
2.区间最大值就是区间长度
处理出每个数相同数值前驱后继.
枚举1的位置,扫一下区间内的每个数,使用其后继来更新区间的范围,同时更新区间最大值,用前缀和判断扫到某个数的位置时是否是一个合法排列.
给定一个长度为n的序列a,选取连续的一段使其为1~k的一个排列。
求k的最大值。
Input
输入的第一行包含一个整数n。接下来n个数描述序列a
Output
输出一个整数表示k的最大值。
Sample Input
5
1 2 3 4 5
Sample Output
5
HINT
100%数据满足:1<=N<=1000000,1 <= ai <=n
Source
如果一个区间内的数是一个1-k的排列的话
一定满足:
1.区间和为len∗(len+1)2\frac {len*(len+1)} 2
2.区间最大值就是区间长度
处理出每个数相同数值前驱后继.
枚举1的位置,扫一下区间内的每个数,使用其后继来更新区间的范围,同时更新区间最大值,用前缀和判断扫到某个数的位置时是否是一个合法排列.
#include<iostream> #include<cstdio> #include<cstring> #include<cmath> #include<algorithm> #define MAXN 1000001 #define GET (ch>='0'&&ch<='9') #define MAXINT 0x3f3f3f3f using namespace std; int n,ans; int nxt[MAXN],pre[MAXN]; unsigned a[MAXN]; inline void in(unsigned &x) { char ch=getchar();x=0; while (!GET) ch=getchar(); while (GET) x=x*10+ch-'0',ch=getchar(); } inline void calc(int x) { int len=0,r=MAXINT; for (int i=x;i;--i) { if (a[i]-a[i-1]==1&&i!=x) break; if (a[i]-a[i-1]>len) len=a[i]-a[i-1]; if (nxt[i]<r) r=nxt[i]; if (i+len-1<r&&i+len-1<=n) if (a[i+len-1]-a[i-1]==1ll*len*(len+1)>>1&&len>ans) ans=len; } } inline void init() { for (int i=1;i<=n;++i) pre[i]=MAXINT; for (int i=n;i;--i) nxt[i]=pre[a[i]],pre[a[i]]=i; for (int i=1;i<=n;++i) { a[i]+=a[i-1]; if (a[i]-a[i-1]==1) calc(i); } } int main() { scanf("%d",&n); for (int i=1;i<=n;++i) in(a[i]); init(); for (int i=n;i;--i) a[i]-=a[i-1]; for (int i=1;i<=(n>>1);++i) swap(a[i],a[n-i+1]); init();printf("%d\n",ans); }
相关文章推荐
- Paper Reading 4:Massively Parallel Methods for Deep Reinforcement Learning
- send和recv函数解析
- 【持久化框架】Mybatis与Hibernate的详细对比
- 一个App完成入门篇(三)-完善主框架
- CoInitialize浅析
- [置顶] 学习JAVA之路(四、java流程控制语句)
- Git 常用命令
- Centos7下完美安装并配置mysql5.6
- C++卷积神经网络实例:tiny_cnn代码详解(8)——partial_connected_layer层结构类分析(上)
- 动态规划方法解旅行商问题(TSP Traveling Salesperson Problem)
- 如何修改Windows Server 2008网域的名称 NetBIOS名称
- HDU1007 Quoit Design 分治
- 字符串常量 解析
- Mybatis sql注入问题
- 操作系统学习五部曲
- VSTO课程学习路线图
- VSTO课程学习路线图
- corethink功能模块探索开发(一)根据已有模块推测目录结构
- 图的遍历
- 虚拟机的三种网络模式