#include<cstdio>
#include<iostream>
#include<algorithm>
#include<cstring>
#include<cmath>
#include<vector>
#include<queue>
#include<map>
#include<set>
#include<stack>
#include<cstdlib>
#include<string>
#include<bitset>
#include<iomanip>
#include<deque>
#include<utility>
#define INF 1000000000
#define fi first
#define se second
#define N 2000005
#define P 1000000007
#define debug(x) cerr<<#x<<"="<<x<<endl
#define MP(x,y) make_pair(x,y)
using namespace std;
typedef long long LL;
typedef pair<int,int> pii;
char _ch;
inline void getint(int &_x)
{
_x=;
for(_ch=getchar();_ch>''||_ch<'';_ch=getchar());
for(;_ch<=''&&_ch>='';_ch=getchar())
_x=_x*+_ch-;
} int stk1[N],top1,stk2[N],top2,ans,n;
//stk1是当前的单调栈,stk2存将要放到stk1中的元素
//stk1里是单调不升的,stk2也是单调不升的
int a; void Clear()//时间复杂度还能保持O(n)
{
int i,now,val;
while(top1)
{
val=stk1[top1];
for(i=top1;i;i--)
if(stk1[top1]!=stk1[i-])
break;
now=top1-i+;
top1=i-;
while(now/)//两两合并成一个更大的
{
stk1[++top1]=val+;
now-=;
}
//for(int j=1;j<=top1;j++)
//debug(stk1[j]);
//cout<<endl;
//ans=max(ans,stk1[1]);
}
ans=max(ans,stk1[]);
} int main()
{
int i,j,now,val;
freopen("vincent.in","r",stdin);
freopen("vincent.out","w",stdout);
cin>>n;
for(i=;i<=n;i++)
{
getint(a);
stk2[++top2]=a;
while(top2)//总共分5种情况
{
if(!top1)//假如第一个栈为空
{
//if(top2>1)
//top2--;
//else
stk1[++top1]=stk2[top2--];
}
else
{
if(stk1[top1]>stk2[top2])//假如第一个栈顶大于第二个栈顶
//if(top2>1)//假如第二个栈
//while(--top1);//清空
//else
stk1[++top1]=stk2[top2--];
else if(stk1[top1]==stk2[top2])//假如第一个栈顶等于第二个栈顶
/*
if(top2>1)//将两个元素合并成一个大的
{
top2--;
stk1[top1]++;
}
else*/
{
stk1[++top1]=stk2[top2--];//相等就先放进去 }
else if(stk1[top1]<stk2[top2])
{
if(top1>&&stk1[top1]==stk1[top1-])//贪心合并栈1顶的两个元素,并放入栈2
{
stk2[++top2]=stk1[top1]+;
top1-=;
}
else
{
top1--;
for(j=;j<=top2;j++)//清空之前将部分栈2内的元素放到栈1内
stk1[++top1]=stk2[j];
Clear();//只能清空掉了
}
}
}
//for(int j=1;j<=top1;j++)
//debug(stk1[j]); //for(int j=1;j<=top2;j++)
//debug(stk2[j]);
//cout<<endl; }
//for(int j=1;j<=top1;j++)
//debug(stk1[j]);
ans=max(ans,stk1[top1]);
}
//for(i=1;i<=top1;i++)
//debug(stk1[i]);
//cout<<endl;
//debug(top1);
Clear();
cout<<ans<<endl;
return ;
}
// davidlee1999WTK 2016/
// srO myk Orz
// ios::sync_with_stdio(false);
//#pragma comment(linker, "/STACK:102400000,102400000") compiler c++,not g++
/*
16
4 4 4 3 3 3 1 1 2
*/

繁华模拟赛 Vicent与游戏的更多相关文章

  1. 繁华模拟赛 Vicent坐电梯

    /*n<=5000­这样就不能用O(n)的转移了,而是要用O(1)的转移.­注意我们每次的转移都来自一个连续的区间,而且我们是求和­区间求和?­前缀和!­令sum[step][i]表示f[ste ...

  2. 繁华模拟赛 vicent的字符串

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  3. 繁华模拟赛 David与Vincent的博弈游戏

    #include<iostream> #include<cstdio> #include<string> #include<cstring> #incl ...

  4. 20181228 模拟赛 T3 字符串游戏 strGame 博弈论 字符串

    3  字符串游戏(strGame.c/cpp/pas) 3.1  题目描述 pure 和 dirty 决定玩 T 局游戏.对于每一局游戏,有n个字符串,并且每一局游戏由K轮组成.具体规则如下:在每一轮 ...

  5. [繁华模拟赛]Evensgn 剪树枝

    Evensgn 剪树枝 题目 繁华中学有一棵苹果树.苹果树有 n 个节点(也就是苹果),n − 1 条边(也就 是树枝).调皮的 Evensgn 爬到苹果树上.他发现这棵苹果树上的苹果有两种:一 种是 ...

  6. noip模拟赛 解谜游戏

    题目描述LYK进了一家古董店,它很想买其中的一幅画.但它带的钱不够买这幅画.幸运的是,老板正在研究一个问题,他表示如果LYK能帮他解出这个问题的话,就把这幅画送给它.老板有一个n*m的矩阵,他想找一个 ...

  7. 20180606模拟赛T4——数学游戏

    数学游戏 题目描述: 小T又发脑残了,没错,她又要求奇怪的东西,这次她想知道[X,Y]之间整数有多少可以表示成K个不同的B的幂的和形势.如\(x,y,k,b=15,20,2,2\),则有: \[17= ...

  8. 20180606模拟赛T1——猫鼠游戏

    题目描述: 猫和老鼠在10*10的方格中运动,例如: *...*..... ......*... ...*...*.. .......... ...*.C.... *.....*... ...*... ...

  9. 繁华模拟赛day8 牛栏

    /* 标称并没有用到题解中提到的那种奇妙的性质,我们可以证明,正常从1开始走的话,需要T次,如何使这个次数减小?题解中提到一个办法,有一步小于n/t,我们考虑这一步,如果把它匀到左右两步中,则可以减小 ...

随机推荐

  1. iOS从App跳转至系统设置菜单各功能项的编写方法讲解

    跳到系统设置里的WiFi界面 info里面设置: 在项目中的info.plist中添加 URL types 并设置一项URL Schemes为prefs,如下图 代码: 复制代码 代码如下: NSUR ...

  2. Opencv step by step - 加载视频

    刚买了本 "学习Opencv" 这本书,慢慢看起来. 一开始就是加载视频了.当然了,首先你要有个视频 从这里下载了一个: tan@ubuntu:~$ wget http://www ...

  3. 编写高质量代码--改善python程序的建议(六)

    原文发表在我的博客主页,转载请注明出处! 建议二十八:区别对待可变对象和不可变对象 python中一切皆对象,每一个对象都有一个唯一的标识符(id()).类型(type())以及值,对象根据其值能否修 ...

  4. 怎样写 OpenStack Neutron 的 Extension (四)

    上文说到需要在 /neutronclient/v2_0/myextension/extension.py 中分别定义五个 class:List/Show/Create/Delete/UpdateExt ...

  5. #Linux学习笔记# Linux系统查看文件内容的命令

    1.cat 连结多个文件的内容并显示在屏幕上:如果没有指定文件或文件名为“-”,则读取标准输入.语法如下: cat [option] ... [file] ... 常用的选项有: 选项-n:编号所有行 ...

  6. SQL 内置排名函数 DENSE_RANK

    求排名前五的数据信息: 实现一: select distinct top 5 Id,Title,sort from content order by sort DESC 实现二: select * f ...

  7. 第二十五课:jQuery.event.trigger的源码解读

    本课主要来讲解jQuery.event.trigger的源码解读. trigger = function(event, data, elem, onlyHandlers){ if(elem & ...

  8. JavaScript、CSS、JSP 实现用户注册页面与信息校验

    参考:http://blog.csdn.net/fightfaith/article/details/50277337 需求:实现用户注册页面并作出逻辑校验.要求: (1)完成注册页面样式如下: (2 ...

  9. WebService 入门程序(一)

    第一步:定义webService接口 package com.robert.ws.service; import javax.jws.WebService; @WebService public in ...

  10. BZOJ-3668 起床困难综合症 位运算+贪心

    faebdc学长杂题选讲中的题目...还是蛮简单的...位运算写的不熟练... 3668: [Noi2014]起床困难综合症 Time Limit: 10 Sec Memory Limit: 512 ...