【JSOI2008】最大数
https://www.luogu.org/problem/show?pid=1198
之前刚学完Splay想找题练手的时候做的,写完Splay交上去了才发现这应该是线段树裸题23333
Splay解法
按照要求操作即可……
#include <iostream>
using namespace std;
int m, d, t;
const int inf = 0x7fffffff;
namespace splay
{
struct node;
node *nil = , *root;
struct node
{
int val, size, maxnum;
node *ch[];
node(int v) : val(v), size(), maxnum(v)
{
ch[] = ch[] = nil;
}
void pull_up()
{
size = ch[]->size + ch[]->size + ;
maxnum = max(val, max(ch[]->maxnum, ch[]->maxnum));
}
int cmp(int k)
{
if(this == nil || k == ch[]->size + )
return -;
else
return (k <= ch[]->size) ? : ;
}
};
void init()
{
if(!nil)
nil = new node(-inf);
nil->size = ;
nil->ch[] = nil->ch[] = nil;
root = new node(-inf);
root->ch[] = new node(-inf);
root->size = ;
}
void rotate(node *&t, int d)
{
node *k = t->ch[d ^ ];
t->ch[d ^ ] = k->ch[d];
k->ch[d] = t;
t->pull_up();
k->pull_up();
t = k;
}
void splay(int k, node *&t = root)
{
int d1 = t->cmp(k);
if(d1 == )
k = k - t->ch[]->size - ;
if(d1 != -)
{
int d2 = t->ch[d1]->cmp(k);
if(d2 != -)
{
int k2 = (d2 == ) ? (k - t->ch[d1]->ch[]->size - ) : k;
splay(k2, t->ch[d1]->ch[d2]);
if(d1 != d2)
{
rotate(t->ch[d1], d2 ^ );
rotate(t, d1 ^ );
}
else
{
rotate(t, d1 ^ );
rotate(t, d2 ^ );
}
}
else
rotate(t, d1 ^ );
}
}
void insert(int val)
{
splay(root->size - );
node *k = root->ch[];
root->ch[] = new node(val);
root->ch[]->ch[] = k;
k->pull_up();
root->ch[]->pull_up();
root->pull_up();
}
int get_maxnum(int len)
{
int from = root->size - len;
int to = from + len - ;
splay(to + , root);
splay(from - , root->ch[]);
return root->ch[]->ch[]->maxnum;
}
}
int main()
{
using namespace splay;
cin >> m >> d;
init();
char a;
int b;
while(m--)
{
cin >> a >> b;
switch(a)
{
case 'A':
insert((b + t) % d);
break;
case 'Q':
t = get_maxnum(b);
cout << t << endl;
break;
}
}
return ;
}
线段树解法
M<=2e5,也就是极限状况下最多2e5个数。开个长度是2e5的线段树,再记录下已经加了N个数了。每次插入就是更改第N+1个元素,查询就是查询区间[N-L+1,N]的最大值。
懒得重写一遍了……
【JSOI2008】最大数的更多相关文章
- BZOJ1012: [JSOI2008]最大数maxnumber [线段树 | 单调栈+二分]
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8748 Solved: 3835[Submi ...
- BZOJ-1012[JSOI2008]最大数maxnumber 线段树区间最值
这道题相对简单下面是题目: 1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MB Submit: 6542 Solve ...
- 洛谷P1198 [JSOI2008]最大数
P1198 [JSOI2008]最大数 267通过 1.2K提交 题目提供者该用户不存在 标签线段树各省省选 难度提高+/省选- 提交该题 讨论 题解 记录 最新讨论 WA80的戳这QwQ BZOJ都 ...
- 【bzoj1012】[JSOI2008]最大数maxnumber
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 8339 Solved: 3624[Submi ...
- Cogs 1844. [JSOI2008]最大数maxnumber
[JSOI2008]最大数maxnumber ★★ 输入文件:bzoj_1012.in 输出文件:bzoj_1012.out 简单对比 时间限制:3 s 内存限制:162 MB [题目描述] 现在请求 ...
- BZOJ 1012: [JSOI2008]最大数maxnumber【线段树单点更新求最值,单调队列,多解】
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 10374 Solved: 4535[Subm ...
- [JSOI2008]最大数maxnumber
[JSOI2008]最大数maxnumber 标签: 线段树 单独队列 题目链接 题解 线段树裸题. 如果一直RE可能是你用的cin/cout. Code #include<cstdio> ...
- bzoj 1012: [JSOI2008]最大数maxnumber (线段树)
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 13081 Solved: 5654[Subm ...
- 洛谷 P1198 [JSOI2008]最大数
洛谷 P1198 [JSOI2008]最大数 题目描述 现在请求你维护一个数列,要求提供以下两种操作: 1. 查询操作. 语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值. ...
- BZOJ 1012: [JSOI2008]最大数maxnumber 单调队列/线段树/树状数组/乱搞
1012: [JSOI2008]最大数maxnumber Time Limit: 3 Sec Memory Limit: 162 MBSubmit: 4750 Solved: 2145[Submi ...
随机推荐
- Cup
Cup Time Limit: 3000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Submissio ...
- awk详解 数组
第1章 awk命令基础 1.1 awk命令执行过程 1.如果BEGIN 区块存在,awk执行它指定的动作. 2.awk从输入文件中读取一行,称为一条输入记录.如果输入文件省略,将从标准输入读取 3.a ...
- Akka(36): Http:Client-side-Api,Client-Connections
Akka-http的客户端Api应该是以HttpRequest操作为主轴的网上消息交换模式编程工具.我们知道:Akka-http是搭建在Akka-stream之上的.所以,Akka-http在客户端构 ...
- Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, Version=3.0.0.0,"解决办法
这是因为先安装了 .NET Framework 4,随后启用了 .NET Framework 3.5 WCF HTTP 激活,则会发生此错误. 只需要已管理员用户在cmd中运行aspnet_regii ...
- Python学习中的一些小例子
这篇文章包括用Python编写的斐波那契数列,三位数的水仙花数和百钱买百鸡的基础代码 斐波那契数列: ''' def hanshu(n): n_1 = 1 n_2 = 1 m = n sumn = 0 ...
- docker下编译mangoszero WOW60级服务端(一)
这几天看到暴雪准备开放怀旧服的新闻,突然想到几年前用大芒果window一键服务端自己搭建过服务,就想着在Linux环境下重新编译一套,毕竟Linux作为服务端,性能和稳定性都会高一些,于是在mac虚拟 ...
- Java--Socket通信(双向)
新建两个工程,一个客户端,一个服务端,先启动服务端再启动客户端两个工程的读写操作线程类基本上完全相同 服务端: import java.io.BufferedReader; import java.i ...
- get和post与服务端的交互方式
在网上看了不少关于get和post的文章,看到博主这个,现在手录下来. 原博客地址:http://www.cnblogs.com/warrior4236/p/5675756.html 一:B/S结构, ...
- android 加载图片圆角等功能的处理
以Glide为例: Glide.with(getContext()).load(item.getSoftLogo()).transform(this.glideRoundTransform).into ...
- 《java.util.concurrent 包源码阅读》12 线程池系列之ThreadPoolExecutor 第二部分
接着说worker线程是如何工作的.ThreadPoolExecutor有一个成员类叫Worker,所起到的作用就是线程池worker线程的作用. private final class Worker ...