博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
BZOJ1012 JSOI2008 最大数maxnumber 线段树/栈+二分法
阅读量:5300 次
发布时间:2019-06-14

本文共 1928 字,大约阅读时间需要 6 分钟。

题意:给定一个数列,要求维护:1、求倒数L个数中的最大值  2、在数列末尾插入(最近的1询问的答案+x)%D。其中初始序列为空。

法一:因为询问最多200000个,所以直接建一棵大小为M的线段树维护即可

#include 
#include
#include
#include
#include
using namespace std;struct Node{ int l,r,m; Node *lchild,*rchild; Node(){} Node(int _l,int _r):l(_l),r(_r),m(0),lchild(0),rchild(0){}}*Root;int N,M,D,x,t;char Order[6];void Pushup(Node *&x){ x->m=max(x->lchild->m,x->rchild->m);}void Build(Node *&x,int l,int r){ x=new Node(l,r); if(l==r) return; int m=(l+r)>>1; Build(x->lchild,l,m),Build(x->rchild,m+1,r);}void Update(Node *&x,int p,int v){ if(x->l==x->r){ x->m=v; return; } int m=(x->l+x->r)>>1; if(p<=m) Update(x->lchild,p,v); else Update(x->rchild,p,v); Pushup(x);}int Query(Node *&x,int l,int r){ if(l<=x->l && x->r<=r) return x->m; int m=(x->l+x->r)>>1,Ans=-1; if(l<=m) Ans=Query(x->lchild,l,r); if(m
rchild,l,r)); return Ans;}int main(){ scanf("%d %d",&M,&D); Build(Root,1,M); for(int i=1,p;i<=M;i++){ scanf("%s",Order); if(Order[0]=='Q'){ cin >> p; cout << (t=Query(Root,N-p+1,N)) << endl; } else{ cin >> x; N++,Update(Root,N,(x+t)%D); } } return 0;}
View Code

法二:显然对于任意一个位置的数,其之前比它小的数在之后的询问中肯定没有贡献。所以维护一个单调栈,用二分来回答询问。

#include 
#include
#include
#include
#include
#include
using namespace std;#define ll long longconst int MAXN=200000+2;int M,N,s[MAXN],C,D,t,a[MAXN];char Order[6];int main(){ scanf("%d%d",&M,&D); while(M--){ int x; scanf("%s%d",Order,&x); if(Order[0]=='Q'){ int p=lower_bound(s+1,s+N+1,C-x+1)-s; printf("%d\n",t=a[s[p]]); } else{ x=(x+t)%D,a[++C]=x; while(N && a[s[N]]<=x) N--; s[++N]=C; } } return 0;}
View Code

 

转载于:https://www.cnblogs.com/WDZRMPCBIT/p/6443498.html

你可能感兴趣的文章
判断9X9数组是否是数独的java代码
查看>>
00-自测1. 打印沙漏
查看>>
UNITY在VS中调试
查看>>
SDUTOJ3754_黑白棋(纯模拟)
查看>>
Scala入门(1)Linux下Scala(2.12.1)安装
查看>>
如何改善下面的代码 领导说了很耗资源
查看>>
Quartus II 中常见Warning 原因及解决方法
查看>>
php中的isset和empty的用法区别
查看>>
Android ViewPager 动画效果
查看>>
pip和easy_install使用方式
查看>>
博弈论
查看>>
Redis sentinel & cluster 原理分析
查看>>
我的工作习惯小结
查看>>
把word文档中的所有图片导出
查看>>
浏览器的判断;
查看>>
ubuntu 18.04取消自动锁屏以及设置键盘快捷锁屏
查看>>
Leetcode 589. N-ary Tree Preorder Traversal
查看>>
机器学习/深度学习/其他开发环境搭建记录
查看>>
xml.exist() 实例演示
查看>>
判断是否为空然后赋值
查看>>