来自北京大学NOIP金牌选手yxc的常用代码模板2,图灵学院和享学课堂

// hh 表示队头,tt表示队尾的后一个位置

int q[N], hh = 0, tt = 0;

// 向队尾插入一个数

q[tt ++ ] = x;

if (tt == N) tt = 0;

// 从队头弹出一个数

hh ++ ;

if (hh == N) hh = 0;

// 队头的值

q[hh];

// 判断队列是否为空

if (hh != tt)

{

}




#### [](https://gitee.com/vip204888/java-p7)5.单调栈



**常见模型:找出每个数左边离它最近的比它大/小的数**



int tt = 0;

for (int i = 1; i <= n; i ++ )

{

while (tt && check(stk[tt], i)) tt -- ;

stk[ ++ tt] = i;

}




#### [](https://gitee.com/vip204888/java-p7)6\. 单调队列



**常见模型:找出滑动窗口中的最大值/最小值**



int hh = 0, tt = -1;

for (int i = 0; i < n; i ++ )

{

while (hh <= tt && check_out(q[hh])) hh ++ ;  // 判断队头是否滑出窗口

while (hh <= tt && check(q[tt], i)) tt -- ;

q[ ++ tt] = i;

}




#### [](https://gitee.com/vip204888/java-p7)7.KMP



// s[]是长文本,p[]是模式串,n是s的长度,m是p的长度

求模式串的Next数组:

for (int i = 2, j = 0; i <= m; i ++ )

{

while (j && p[i] != p[j + 1]) j = ne[j];

if (p[i] == p[j + 1]) j ++ ;

ne[i] = j;

}

// 匹配

for (int i = 1, j = 0; i <= n; i ++ )

{

while (j
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值