
----栈
欣君
追寻那如樱花般的绚烂
展开
-
1478 括号序列的最长合法子段
感觉自己宛如一个智障。。。维护一个栈,dp保证相邻的合法括号能够相连接,就好了。#includeusing namespace std;const int MAXN=1001000;char s[MAXN];int dp[MAXN];stack stk;int main(){ int len,i,ans,sum,tmp; while(scanf("%s",&s)!=E原创 2016-11-23 02:23:36 · 323 阅读 · 0 评论 -
51nod 1158 全是1的最大子矩阵
#includeusing namespace std;int val[550][550];int sta[550],lef[550];int main(){ int n,m,i,j,k,ans,top; while(~scanf("%d%d",&n,&m)) { ans=0; for(i=1;i<=n;i++) { for(j=1;j<=m;j++)转载 2016-12-06 23:12:21 · 368 阅读 · 0 评论 -
51nod 1423 最大二“货”
用单调栈维护区间最大值。#includeusing namespace std;const int MAXN=100100;int stk[MAXN],a[MAXN];int main(){ int n,ans,cnt,i; while(~scanf("%d",&n)) { for(i=1;i<=n;i++) scanf("%d",&a[i]); ans=0;转载 2016-11-24 21:53:40 · 366 阅读 · 0 评论 -
51nod 1403 有趣的堆栈
大家都熟悉堆栈操作。一个堆栈一般有两种操作,push和pop。假设所有操作都是合法的并且最终堆栈为空。我们可以有很多方法记录堆栈的操作,(1) 对每个pop操作,我们记录它之前一共有多少个push操作。(2) 对每个pop操作,我们记录这个被Pop的元素曾经被压上了几个。对于第二种记录方式,上面压的个数,即为该元素的push和pop操作之间,另外push和pop的元素个数。也就是说,如原创 2016-12-17 21:47:05 · 437 阅读 · 0 评论 -
51nod 1215 数组的宽度
单调栈搞一下,注意在等于时是否弹出。这里设为从左到右弹出,从右到左不弹出。#includeusing namespace std;const int MAXN=50050;long long a[MAXN],minlef[MAXN],minrig[MAXN],maxlef[MAXN],maxrig[MAXN];struct node{ int pos; long long x原创 2017-02-09 14:45:22 · 325 阅读 · 0 评论 -
51nod 1437 迈克步
单调栈搞一下。时间卡得好紧,printf输出单字符好慢,要用putchar。#includeusing namespace std;void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((ch=getchar())>='0')&&(ch<='9'))a*=10原创 2017-02-09 15:07:40 · 302 阅读 · 0 评论 -
51nod 1821 最优集合
如果现在能得到[1,t]范围内的任意值。若新来了一个数x,x利用这个性质,O(T*(N+M))时间处理下就行了。(膜zhenhao大佬)#include using namespace std;void read(int&a){ char ch;while(!((ch=getchar())>='0')&&(ch<='9')); a=ch-'0';while(((c原创 2017-03-15 20:29:38 · 388 阅读 · 0 评论 -
51nod 1275 连续子段的差异
#includeusing namespace std;const int MAXN=50050;int a[MAXN];deque dpmin,dpmax;int main(){ int n,k,i,j; long long ans; while(~scanf("%d%d",&n,&k)) { for(i=1;i<=n;i++) scanf("%d",&a[i]原创 2017-07-12 18:57:50 · 308 阅读 · 0 评论 -
51nod 1349 最大值
单调栈瞎搞一下就好了//#include#include#include#include#includeusing namespace std;const int MAXN=100100;long long a[MAXN],bef[MAXN],aft[MAXN],ans[MAXN],stk[MAXN];int main(){ long long n,i,k,cnt,q;原创 2017-07-05 16:14:25 · 385 阅读 · 2 评论