FZU 1894 志愿者选拔 (单调队列)

本文介绍了一道使用单调队列算法解决的志愿者选拔问题。通过维护一个单调队列,能够在每次查询时快速找到最大值,适用于在线处理数据的情况。文章提供了完整的C++代码实现。
 1 /******************************************************************
 2 题目:           志愿者选拔(FZU 1894)
 3 算法:          单调队列
 4 算法思想:      在每个元素入队的时候入队的时候,使队列单调,查找
 5                  的时候就能很快找到最值。
 6 *******************************************************************/
 7 #include<cstdio>
 8 #include<cstring>
 9 #include<algorithm>
10 #include<iostream>
11 using namespace std;
12 
13 const int mx=1000006;
14 struct Q
15 {
16     int x,di;
17 };
18 Q q[mx];
19 char s[10];
20 
21 int main()
22 {
23     int t;
24     scanf("%d",&t);
25     while (t--)
26     {
27         int h=0,r=-1;                       ///h为对头,r为队尾
28         int cut=0,id=0;                     ///cut为删除数的个数,id为插入数的下标。
29         scanf("%s",s);
30         while (~scanf("%s",s))
31         {
32             if (s[0]=='E') break;
33             if (s[0]=='G') cut++;
34             if (s[0]=='Q')
35             {
36                 if (cut>=id) printf("-1\n");     ///删除数个数大于等于最大数id,队列为空
37                 else
38                 {
39                     while (q[h].di<=cut) h++;    ///由于队列是单调的,所以只要找到第一个没
40                                                  ///有被删除数就是最大数,只要一个数的id大于
41                                                  ///删除数的个数,那么这个数就没有被删除
42                     printf("%d\n",q[h].x);
43                 }
44             }
45             if (s[0]=='C')
46             {
47                 int x;
48                 scanf("%s%d",s,&x);
49                 while (r>=h&&q[r].x<x)          ///找到这个数要插入的为,使队列从头到尾是单调
50                                                 ///的,这样做虽然会覆盖一些数,但是覆盖的数已
51                                                 ///经不会再输出了。
52                 {
53                     r--;
54                 }
55                 q[++r].x=x;
56                 q[r].di=++id;
57             }
58         }
59     }
60 }

 

转载于:https://www.cnblogs.com/pblr/p/5735855.html

内容概要:本文系统介绍了算术优化算法(AOA)的基本原理、核心思想及Python实现方法,并通过图像分割的实际案例展示了其应用价值。AOA是一种基于种群的元启发式算法,其核心思想来源于四则运算,利用乘除运算进行全局勘探,加减运算进行局部开发,通过数学优化器加速函数(MOA)和数学优化概率(MOP)动态控制搜索过程,在全局探索与局部开发之间实现平衡。文章详细解析了算法的初始化、勘探与开发阶段的更新策略,并提供了完整的Python代码实现,结合Rastrigin函数进行测试验证。进一步地,以Flask框架搭建前后端分离系统,将AOA应用于图像分割任务,展示了其在实际工程中的可行性与高效性。最后,通过收敛速度、寻优精度等指标评估算法性能,并提出自适应参数调整、模型优化和并行计算等改进策略。; 适合人群:具备一定Python编程基础和优化算法基础知识的高校学生、科研人员及工程技术人员,尤其适合从事人工智能、图像处理、智能优化等领域的从业者;; 使用场景及目标:①理解元启发式算法的设计思想与实现机制;②掌握AOA在函数优化、图像分割等实际问题中的建模与求解方法;③学习如何将优化算法集成到Web系统中实现工程化应用;④为算法性能评估与改进提供实践参考; 阅读建议:建议读者结合代码逐行调试,深入理解算法流程中MOA与MOP的作用机制,尝试在不同测试函数上运行算法以观察性能差异,并可进一步扩展图像分割模块,引入更复杂的预处理或后处理技术以提升分割效果。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值