【bzoj1318】[Spoj744] Longest Permutation(乱搞)
题目传送门:https://www.lydsy.com/JudgeOnline/problem.php?id=1318
这道题的大意是要求一个长度为len,并包含1~len所有数,并使len最大的子区间。开始看题的时候一脸懵逼(好像可以二分?),然后写到一半突然发现二分有反例。
于是上网搜了一波题解。
正确解法:
我们可以发现这个区间必定满足这样的性质:假设它的长度为len,则区间内最大值为len,区间内所有数的和为(len+1)*len/2,并且区间内所有数两两不相等。
因为区间内一定包含1,所以我们可以以1为界点划分整个序列。然后我们假设区间内的最大值在1的左侧,于是从当前的1开始向左枚举,并把从当前枚举到的数到1之间的最大值作为区间的长度,然后用上面的法则判断该区间是否合法。因为求区间和明显比区间最大值方便,所以我们就用前缀和求出当前区间的和来判断。判断区间里是否有相同的数,只需维护一个nxt数组,每个数右边第一个相同的数出现的位置,然后一边枚举一边更新合法区间的右端点(即与区间内的数有冲突的最左边一个数)。
代码:
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<ctime>
#include<algorithm>
#include<queue>
#include<vector>
#include<map>
#define ll long long
#define ull unsigned long long
#define max(a,b) (a>b?a:b)
#define min(a,b) (a<b?a:b)
#define lowbit(x) (x& -x)
#define mod 1000000007
#define inf 0x3f3f3f3f
#define eps 1e-18
#define maxn 1000020
inline ll read(){ll tmp=; char c=getchar(),f=; for(;c<''||''<c;c=getchar())if(c=='-')f=-; for(;''<=c&&c<='';c=getchar())tmp=(tmp<<)+(tmp<<)+c-''; return tmp*f;}
inline ll power(ll a,ll b){ll ans=; for(;b;b>>=){if(b&)ans=ans*a%mod; a=a*a%mod;} return ans;}
inline ll gcd(ll a,ll b){return b?gcd(b,a%b):a;}
using namespace std;
int a[maxn],nxt[maxn];
int last[maxn];
ll sum[maxn];
int n;
int work(int n)
{
memset(last,,sizeof(last));
memset(nxt,,sizeof(nxt));
for(int i=;i<=n;i++){
sum[i]=sum[i-]+a[i];
if(last[a[i]])nxt[last[a[i]]]=i;
last[a[i]]=i;
}
for(int i=;i<=n;i++)if(!nxt[i])nxt[i]=n+;
int ans=;
for(int i=;i<=n;i++)
if(a[i]==){
ans=max(ans,);
if(i==)continue;
int r=nxt[i],mx=;
for(int j=i-;j>&&a[j]!=;j--){
r=min(r,nxt[j]); mx=max(mx,a[j]);
if(j+mx<=r&&sum[j+mx-]-sum[j-]==1ll*(mx+)*mx/)ans=max(ans,mx);
}
}
return ans;
}
int main()
{
n=read();
for(int i=;i<=n;i++)a[i]=read();
int ans1=work(n);
for(int i=;i*<=n;i++){
int tmp=a[i]; a[i]=a[n-i+]; a[n-i+]=tmp;
}
int ans2=work(n);
printf("%d\n",max(ans1,ans2));
return ;
}
bzoj1318
【bzoj1318】[Spoj744] Longest Permutation(乱搞)的更多相关文章
- bzoj 1318: [Spoj744] Longest Permutation 智商题
1318: [Spoj744] Longest Permutation Time Limit: 10 Sec Memory Limit: 162 MBSubmit: 361 Solved: 215 ...
- bzoj 1318 [SPOJ744] Longest Permutation (排列)
大意: 给定序列, 求选出一个长度为k的区间, 使得区间内的数为[1,k]的排列, 且要求k最大 这题好神啊. 每个排列有且仅有一个1, 我们按1将序列分成若干子问题来处理, 而每个位置最多属于两个子 ...
- URAL 1827 Indigenous Wars(排序、乱搞)
题意:给一个长度为n数组{a[i]}.有m个操作Ti,Si,Li表示找以Ti值结束,以Si值开始,长度为Li的连续子串.找到后,将区间的答案值设为1.一开始答案值全部为0.最后输出n个答案值. 好久没 ...
- UVA 11853 [dfs乱搞]
/* 大连热身E题 不要低头,不要放弃,不要气馁,不要慌张 题意: 在1000×1000的格子内有很多个炮弹中心,半径给定. 为某人能否从西部边界出发,从东部边界走出. 不能输出不能,能的话输出最北边 ...
- Codeforces 732e [贪心][stl乱搞]
/* 不要低头,不要放弃,不要气馁,不要慌张 题意: 给n个插座,m个电脑.每个插座都有一个电压,每个电脑都有需求电压. 每个插座可以接若干变压器,每个变压器可以使得电压变为x/2上取整. 有无限个变 ...
- 【BZOJ-4692】Beautiful Spacing 二分答案 + 乱搞(DP?)
4692: Beautiful Spacing Time Limit: 15 Sec Memory Limit: 128 MBSubmit: 46 Solved: 21[Submit][Statu ...
- 【BZOJ-3578】GTY的人类基因组计划2 set + map + Hash 乱搞
3578: GTY的人类基因组计划2 Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 367 Solved: 159[Submit][Status][ ...
- 【BZOJ-2937】建造酿酒厂 前缀和 + 展环为链 + 乱搞
2937: [Poi2000]建造酿酒厂 Time Limit: 1 Sec Memory Limit: 128 MBSubmit: 70 Solved: 24[Submit][Status][D ...
- SCOI 2013 密码 & 乱搞
题意: Fish 是一条生活在海里的鱼.有一天他很无聊,就到处去寻宝.他找到了位于海底深处的宫殿,但是一扇带有密码锁的大门却阻止了他的前进.通过翻阅古籍,Fish 得知了这个密码的相关信息:1. 该密 ...
随机推荐
- cocos2d-x 游戏优化方案
优化的方案: 引擎底层优化.纹理优化.渲染优化.资源缓存.内存优化. 纹理优化: cocos2d-x 底层是OPenGL ES实现的. 对于图案片载入的内存是2的幂次方. 使用的图片是100*128 ...
- Android 版本更新升级
推荐一款很好的版本升级开源框架: https://github.com/WVector/AppUpdate 个人地址:总结https://gitee.com/anan9303/AppVersionUp ...
- XML 文档的结构
XML 文档的组成 一个XML文档由两部分构成:第一部分是文档序言,第二部分是文档元素(节点). 1.文档序言 文档序言通常位于XML文档的顶端,根元素之前出现,它是一个特定的包含XML 文档设定信息 ...
- [转]JavaWeb之 Servlet执行过程 与 生命周期
https://www.cnblogs.com/vmax-tam/p/4122105.html Servlet的概念 什么是Servlet呢? Java中有一个叫Servlet的接口,如果一个普通的类 ...
- QL 获取当前日期,年、月、日、周、时、分、秒
?select GETDATE() as '当前日期', DateName(year,GetDate()) as '年', DateName(month,GetDate()) as '月', Date ...
- Introduction to Mathematical Thinking - Week 3
there exists and all there exists 证明根号2是无理数 all 习题 3. Which of the following formal propositions say ...
- 段合并 segments merge 被删除的文档的删除时间
2.5 段合并 每个索引分为多个“写一次,读多次”的段 write once and read many times segments 建立索引时,一个段写入磁盘以后就不能更新:被删除的文档的信息存 ...
- puppeteer,webdriverio, chrome webdriver
http://www.r9it.com/20171106/puppeteer.html Puppeteer 至少需要 Node v6.4.0,如要使用 async / await,只有 Node v7 ...
- LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX" failed:[10054] Connection reset by peer [MsgId:MERR-27780]
最近做一个负载均衡项目的性能测试,使用LR录制脚本协议为https协议,回放脚本时出现报错: [GENERAL_MSG_CAT_SSL_ERROR]connect to host "XXX& ...
- javascript实例:显示时间
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8&quo ...