博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【JSOI2008】最大值
阅读量:5242 次
发布时间:2019-06-14

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

线段树裸题!动态RMQ。

这道题的操作是直接在序列末尾添加数值,所以连\(push_{down}\),以及建树什么的都不用了。。

这真是写过的最简短的一道\(seg_{tree}\)了2333

(似乎有很多其他做法,不过没有研究qwq(因为太菜))

#include 
#include
#include
#include
#include
using namespace std;#define ll long long#define mod d#define MAXN 200233#define inf -5223372036854775808#define leftson cur<<1#define rightson cur<<1|1#define mid ((l+r)>>1)#define push_up ans[cur]=llmax(ans[leftson],ans[rightson])%modll m,d;int tot=0;ll llmax(ll x,ll y){ return x>y?x:y;}ll ans[MAXN<<2]={};inline void change(int adc,int cur,int l,int r,int del){ if (l==r) { ans[cur]=del; return; } if (adc<=mid) change(adc,leftson,l,mid,del); if (adc>mid) change(adc,rightson,mid+1,r,del); push_up;}inline ll query(int adl,int adr,int cur,int l,int r){ if (adl<=l&&r<=adr) { return ans[cur]; } ll x=inf,y=inf; if (adl<=mid) x=query(adl,adr,leftson,l,mid); if (adr>mid) y=query(adl,adr,rightson,mid+1,r); return llmax(x,y);}int main(){ scanf("%lld%lld",&m,&d); char q; ll a,b=0; for (int i=1;i<=m;i++) { cin>>q; scanf("%lld",&a); if (q=='A') { change(++tot,1,1,m,(a+b)%mod); continue; } if (a==0) b=0; else b=query(tot-a+1,tot,1,1,m); printf("%lld\n",b); } return 0;}

转载于:https://www.cnblogs.com/Kan-kiz/p/10936927.html

你可能感兴趣的文章
MySQL强化练习答案
查看>>
Linux的LS命令参数
查看>>
response.redirect和server.Transfer的差别详解
查看>>
mysql数据库性能优化(包括SQL,表结构,索引,缓存)
查看>>
存储过程2
查看>>
tab奇偶行颜色交替+插件
查看>>
【信息安全】作业五 有关散列函数安全性的知识扩展
查看>>
Very Deep Convolutional Networks for Large-Scale Image Recognition
查看>>
去除默认样式
查看>>
五. 带括号的表达式 OGNL 第4章. 表达式
查看>>
JNI_最简单的Java调用C/C++代码
查看>>
简述Android SDK制作流程
查看>>
细说JAVA反射
查看>>
查找算法——斐波那契查找
查看>>
【转载】 网络性能测试工具
查看>>
Java学习札记2013
查看>>
VSCode插件开发全攻略(二)HelloWord
查看>>
传送门
查看>>
如何获得select被选中option的value和text
查看>>
vim的配色方案
查看>>