[JSOI2008]最大数
来源:互联网 发布:中国律师业务数据 编辑:程序博客网 时间:2024/05/16 17:39
1.给一个比较简单的做法,由于先入队的较小数,在有后入队的大数的情况下不可能为答案,所以,可以维护一个单调队列。由于单调队列中入队先后,与数的大小皆是有序的,故可以用二分查找找到单调队列中,在后l个数里,最靠近队首(最大)的数,即为答案。
ps:(1)线段树常数大故此做法要快得多 (2)c++中可用函数lower_bound实现二分查找功能。
#include<iostream>#include<algorithm>using namespace std;int q[200001],a[200001];int main(){ int m,d; cin>>m>>d; int t=0; int jiashu; int tail=0; int l=0; for (int i=1;i<=m;++i) { char c;int x;cin>>c>>x; if (c=='A') { jiashu=(t+x)%d; while (jiashu>=q[tail]&&tail!=0) --tail; q[++tail]=jiashu; a[tail]=++l; } else { t=q[lower_bound(a+1,a+1+tail,l-x+1)-a]; cout<<t<<endl; } }}
2.有点离线的想法:如果执行了m次加入操作,那么整个序列的长度也就是m呗
所以,一开始先建好长度为m的线段树,初始化min=-INT_MAX,剩下的就是添加和查询了。
#include<iostream>using namespace std;int jiashu=0;int fanwei1,fanwei2;int y=0;int shuzi[200001];char zifu[200001];struct data{ int max;}tree[500000];void add(int l,int r,int root){ if (l==r) { tree[root].max=jiashu; return; } int mid=(l+r)/2; if (y<=mid) add(l,mid,root*2); else add(mid+1,r,root*2+1); tree[root].max=max(tree[root*2].max,tree[root*2+1].max); }int maxx=0;void find(int l,int r,int root){ if (r<=fanwei2&&l>=fanwei1) { maxx=max(maxx,tree[root].max); return; } int mid=(l+r)/2; if (mid>=fanwei1) find(l,mid,root*2); if (fanwei2>mid) find(mid+1,r,root*2+1);}int main(){ int m,d;cin>>m>>d;int n=0; for (int i=1;i<=m;++i) { char c;int x; cin>>c>>x; zifu[i]=c; if (c=='A') ++n; shuzi[i]=x; } int t=0; for (int i=1;i<=m;++i) { if (zifu[i]=='A') { jiashu=(shuzi[i]+t)%d; y++; add(1,n,1); } else { fanwei1=y-shuzi[i]+1; fanwei2=y; maxx=0; find(1,n,1); t=maxx; cout<<maxx<<endl; } }}
1 0
- 【JSOI2008】最大数
- [JSOI2008]最大数maxnumber
- jsoi2008最大数bzoj1012
- 洛谷:JSOI2008 最大数
- [JSOI2008]最大数
- [JSOI2008]最大数maxnumber
- [JSOI2008]最大数
- [JSOI2008]最大数
- P1198 [JSOI2008]最大数
- [BZOJ1012] [JSOI2008] 最大数
- luoguP1198 [JSOI2008]最大数
- [JSOI2008]最大数
- [JSOI2008]最大数maxnumber
- 【BZOJ1012】【JSOI2008】最大数
- [JSOI2008]最大数maxnumber
- [Bzoj1012][JSOI2008]最大数maxnumber
- bzoj1012[JSOI2008]最大数maxnumber
- [BZOJ1012][JSOI2008]最大数maxnumber
- 5.6.3
- [译] iOS 开发之新版 APNs 搭建必备知识
- 【leetcode】【Medium】【413. Arithmetic Slices】【Math】【Dynamic programming】
- java 常用资源整理
- MATLAB点云处理:读取、展示、最近邻、ICP算法求取转移矩阵、旋转
- [JSOI2008]最大数
- 玲珑oj 1073 - Duplicate Numbers
- 圣诞节祝福小Demo:JingleBells背景音乐+礼物闪烁下落+跑马灯效果
- 常用语言图表库总结
- linux 文件权限
- RecyclerView的拖动和滑动 第二部分 :拖块,Grid以及自定义动画
- [codevs 1391] 伊吹萃香
- 贪吃蛇
- RecyclerView 的用法探秘 (基础篇)