[单调队列]51 Nod 1952——栈
来源:互联网 发布:饥荒如何修改mod数据 编辑:程序博客网 时间:2024/06/04 20:04
题目梗概
要维护一个栈。
能够从栈顶和栈底加数,并能从栈顶取数。
询问每次操作后栈里的最大元素。
解题思路
维护一个单调递减的单调队列就可以了。
但是要注意统计每个元素前面有几个未删的比当前元素小的元素个数。
#include<cstdio>using namespace std;const int maxn=10000005,MOD=1e9+7;int n,A,B,C,x,a,b,tt,s[2*maxn],w[2*maxn],sum,ans,hed,til;void put1(int x){sum++;if (hed>til) s[++til]=x,w[til]=0;else{if (x<=s[til]) w[til]++;else s[++til]=x,w[til]=0;}}void put2(int x){sum++;int sum=0;while(hed<=til&&x>s[hed]) sum+=w[hed]+1,hed++;s[--hed]=x;w[hed]=sum;}void get(){sum--;if (w[til]) w[til]--;else til--;}int main(){ freopen("exam.in","r",stdin); freopen("exam.out","w",stdout); scanf("%d%d%d%d%d%d%d%d",&n,&A,&B,&C,&x,&a,&b,&tt); hed=n+1;til=n; for (int i=1;i<=n;i++){ x=((long long)x*a+b)%tt; if (x%((long long)A+B+C)<A||sum<=1) put1(x);else if (x%((long long)A+B+C)<A+B) put2(x);else get(); ans=(s[til]+ans)%MOD; } printf("%d\n",ans); return 0;}
阅读全文
0 0
- [单调队列]51 Nod 1952——栈
- 51NOD 1952 栈 【单调队列】
- 51nod 1952 栈【单调队列】
- 51Nod - 1050 单调队列
- [贪心+单调队列+ST算法]51 nod 1288 ——汽油补给
- 51Nod - 1272 单调队列 + 二分
- [分治 || 单调栈 单调队列] 51Nod 1215 数组的宽度
- 单调栈——51nod 1423 最大二“货”
- 51nod 1102 单调栈
- 51nod 1102 【单调栈】
- 51Nod - 1102 单调栈
- 51nod 1102单调栈
- 【单调队列】单调队列不单调——噗
- 51nod 1275:连续子段的差异 单调队列
- 51nod-1275 连续子段的差异(单调队列)
- [单调队列] 51Nod 1275 连续子段的差异
- 【单调队列】51nod 1275 连续子段的差异
- 51 nod 1275 连续子段的差异(单调队列)
- DB2备份时数据库名字大小写的影响
- Tomcat 部署时 war 和 war exploded 区别
- 用qt读取文件
- pycharm和IntelliJ IDEA永久激活
- 【1701H1】【穆晨】【171029】连续第十九天总结
- [单调队列]51 Nod 1952——栈
- 棋盘覆盖问题C++版
- Android腾讯X5内核WebView加载失败原因
- Python 把较长的一行代码分成多行的技巧
- 日常运维(一):w命令 vmstat命令 top命令 sar命令 nload命令
- 【程序员代码心得】Bootatrap导航和轮播以及栅格布局的实现
- 常用的文件类型有哪些?有什么类型,属于什么文件?
- 波哥 安装lnmp环境笔记
- 关于 web.xml 的说明