【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值
题目链接:http://www.lydsy.com:808/JudgeOnline/problem.php?id=1012
题意:维护一个数列,开始时没有数值,之后会有两种操作,
Q L :查询数列末k位的最大值;
A n:上一次查询的结果加上n添加到数列的末尾;第一次添加时,认为t = 0;
Sample Input
A 96
Q 1
A 97
Q 1
Q 2
Sample Output
93
96
#include<bits/stdc++.h>
using namespace std;
#define MS0(a) memset(a,0,sizeof(a))
#define MS1(a) memset(a,-1,sizeof(a))
#define ok puts(" ok")
#define bug puts(" bug ")
#define INF 0x3f3f3f3f
#define esp 1e-8 typedef long long ll;
const int maxx=;
ll num[maxx],len=,mx[maxx];
int lowbit(int i){return i&(-i);}
void modify(int pos)//更改1~pos的max
{
mx[pos]=num[pos];
for(int j=;j<lowbit(pos);j<<=)
{
mx[pos]=max(mx[pos],mx[pos-j]);
}
}
int query(int l,int r)
{
ll ans=-INF;
//lowbit()会出现1 2 4,这里面出现的间隔,就需要要两层循环里避免中间值;
//并且lowbit的值代表的就是该值代表的数的个数;
while(l<=r)
{
ans=max(ans,num[r]);
for(--r;l+lowbit(r)<=r;r-=lowbit(r))
ans=max(ans,mx[r]);
}
return ans;
}
int main()
{
//freopen("in.txt","r",stdin);
ll m,mod;
scanf("%lld%lld",&m,&mod);
ll t=,x;char op[];
for(int i=;i<=m;i++)
{
scanf("%s%lld",op,&x);
if(op[]=='A')
{
num[++len]=(t+x)%mod;
modify(len);
}
else{
t=query(len-x+,len);
printf("%lld\n",t);
}
}
return ;
}
【BZOJ】1012: [JSOI2008]最大数maxnumber 树状数组求区间最值的更多相关文章
- 【BZOJ1012】【树状数组求区间最值】最大数maxnumber
Description 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值.限制:L不超过当前数列的长度. 2. ...
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 4750 Solved: 2145[Submi ...
- BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 10374 Solved: 4535[Subm ...
- bzoj 1012: [JSOI2008]最大数maxnumber (线段树)
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 13081 Solved: 5654[Subm ...
- bzoj 2819 Nim dfn序+树状数组维护区间异或值
题目大意 著名游戏设计师vfleaking,最近迷上了Nim.普通的Nim游戏为:两个人进行游戏,N堆石子,每回合可以取其中某一堆的任意多个,可以取完,但不可以不取.谁不能取谁输.这个游戏是有必胜策略 ...
- 树状数组求区间和模板 区间可修改 参考题目:牛客小白月赛 I 区间
从前有个东西叫树状数组,它可以轻易实现一些简单的序列操作,比如单点修改,区间求和;区间修改,单点求值等. 但是我们经常需要更高级的操作,比如区间修改区间查询.这时候树状数组就不起作用了,只能选择写一个 ...
- [Split The Tree][dfs序+树状数组求区间数的种数]
Split The Tree 时间限制: 1 Sec 内存限制: 128 MB提交: 46 解决: 11[提交] [状态] [讨论版] [命题人:admin] 题目描述 You are given ...
- BZOJ 1012 [JSOI2008]最大数maxnumber【线段树】
水题,每次记录一下当前有多少个数,然后按照题目所指示的那样模拟就行,每次向线段树末尾插入(其实是修改)题目中指定的数,然后询问当前的个数到前面Q个数中最大值是多少结果就是,好久不碰线段树了,用数组模拟 ...
- BZOJ 1012: [JSOI2008]最大数maxnumber 线段树
题目链接:http://www.lydsy.com/JudgeOnline/problem.php?id=1012 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作.语法:Q L 功能: ...
随机推荐
- 文件和目录之chown、fchown和lchown函数
下面几个chown函数可用于更改文件的用户ID和组ID. #include <unistd.h> int chown( const char *pathname, uid_t owner, ...
- struts2 CRUD 入门 配置
本文介绍struts2在eclipse下的配置,实现一个具有CRUD功能的图书管理系统. 1 开发环境配置 1.1 在Eclipse中配置Struts2 1.1.1 ...
- iOS开发之静态库.a的制作教程
第一种方法:直接新建一个工程. 1.新建项目-> 选择 “Cocoa Touch Static Library” 2.添加库需要包含的源代码,将你工程里的代码添加到打静态库工程里: 3.配置一下 ...
- WebAPI返回JSON的正确格式
最近打算用WebAPI做服务端接口,返回JSON供ANDROID程序调用,结果试了好几次JSONObject都无法解析返回的JSON字符串.看了一下服务端代码: public string Get() ...
- Android打地鼠游戏源码带道具购买的Android游戏开发
这是一款基于安卓的打地鼠游戏,界面简洁,有level模式打地鼠和无尽模式打地鼠两种游戏模式,并可以通过商店使用金币进行道具的购买,道具可以让你更容易通关:同时金币可以在游戏通关的时候获取.工程中有较为 ...
- 圆满完成平安科技Web安全与App应用安全测试培训!
圆满完成平安科技Web安全与App应用安全测试培训!
- centos find
首先你要确定你的软件是什么方式安装?如果不确定,你可知道你的软件名字,用find查找一下在哪个目录find / -name softname
- web框架--来自维基百科
- Android 使用BaseAdapter 插入不同类型数据
在使用过程有时要在listview中插入不同类型的数据,比如说position=0的位置插入,广告,其它列表显示数据的情况. 一定要重写两种方法 @Override public int getIte ...
- UITabBar - 深度解剖
for (UIView *tabbarbutton in self.subviews) { // NSLog(@"%@",tabbarbutton); ...