题目

题目链接

大意:维护一个数列,有两种操作:

  • 查询操作Q  L:查询当前数列中末尾L个数中的最大的数
  • 插入操作A  n:将n加上t再对D取模,将所得值插入数列末尾

解决方案

由题意知,只有两种操作:单点修改、区间查询

 #include<bits/stdc++.h>
using namespace std; typedef long long ll;
const ll INF = (ll) << ;
const int maxn = + ;
ll maxv[maxn << ];
int n;
ll mod; int ql, qr; //查询[ql, qr]中的最小值
ll query(int o,int L,int R)
{
//printf("o:%d L:%d R:%d\n", o, L, R);
int M = L + (R - L) / ;
ll ans = -INF;
if(ql <= L && R <= qr) return maxv[o];
if(ql <= M) ans = max(ans, query(*o, L, M));
if(qr > M) ans = max(ans, query(*o+, M+, R));
return ans;
} ll P, v; //修改A[p]=v
void update(int o, int L, int R)
{
int M = L + (R-L)/;
if(L == R) maxv[o] = v; //更新叶子结点
else
{
if(P <= M) update(*o, L ,M);
else update(*o+, M+, R);
maxv[o] = max(maxv[*o], maxv[*o+]); //更新非叶子结点
}
} void print_debug(int o, int L, int R)
{
printf("o:%d L:%d R:%d maxv:%lld\n", o, L, R, maxv[o]);
if(R > L)
{
int M = L + (R - L) / ;
print_debug(*o, L, M);
print_debug(*o+, M+, R);
}
} int main()
{
scanf("%d%lld", &n, &mod);
char order[];
int cnt = ;
ll val, t = ; for(int i = ;i <= (n <<);i++) maxv[i] = -INF; //初始化 for(int i = ;i < n;i++)
{
scanf("%s", order);
if(order[] == 'A')
{
scanf("%lld", &val);
P = ++cnt;
v = (val + t + mod) % mod;
update(, , n);
//print_debug(1, 1, n);
}
else
{
int L;
//printf("cnt: %d\n", cnt);
scanf("%d", &L);
ql = cnt - L + ; qr = cnt;
t = query(, , n);
printf("%lld\n", t);
//print_debug(1, 1, n);
}
} return ;
}

P1198最大数——线段树点修改&&模板题的更多相关文章

  1. P4145——线段树点修改&&模板题

    题目 链接 题意:对一个数列进行以下两种操作: 给$[l,r]$中的每个数开平方(下取整) 询问$[l,r]$中各个数的和 解决方法 显然,区间开平方不满足区间可加性,所以对区间中每个数开平方不能通过 ...

  2. P1198 最大数 线段树水题

    这道题模拟一下可以过,但是我们发现线段树也可以安全水过...... 写的线段树只需要滋磁单点修改,区间求max即可 我一开始犯了一个很SB的错误:每次插入修改了t,然后疯狂爆0到怀疑人生... 而且我 ...

  3. 【BZOJ 3196】二逼平衡树 线段树套splay 模板题

    我写的是线段树套splay,网上很多人写的都是套treap,然而本蒟蒻并不会treap 奉上sth神犇的模板: //bzoj3196 二逼平衡树,支持修改某个点的值,查询区间第k小值,查询区间某个值排 ...

  4. 洛谷 - P1198 - 最大数 - 线段树

    https://www.luogu.org/problemnew/show/P1198 要问区间最大值,肯定是要用线段树的,不能用树状数组.(因为没有逆元?但是题目求的是最后一段,可以改成类似前缀和啊 ...

  5. codevs 1082 线段树练习3 模板题

    #include<cstdio> #include<cstring> #include<algorithm> using namespace std; ],sum[ ...

  6. HDU1698:Just a Hook(线段树区域更新模板题)

    http://acm.hdu.edu.cn/showproblem.php?pid=1698 Problem Description In the game of DotA, Pudge’s meat ...

  7. FZU Problem 2171 防守阵地 II (线段树区间更新模板题)

    http://acm.fzu.edu.cn/problem.php?pid=2171 成段增减,区间求和.add累加更新的次数. #include <iostream> #include ...

  8. HDU 1166 敌兵布阵(线段树/树状数组模板题)

    敌兵布阵 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others) Total Submi ...

  9. Luogu P1198 BZOJ 1012 最大数 (线段树)

    手动博客搬家: 本文发表于20170821 14:32:05, 原地址https://blog.csdn.net/suncongbo/article/details/77449455 URL: (Lu ...

随机推荐

  1. Python基础总结之第七天开始【总结字符串、列表、元组的常用方法】(新手可相互督促)

    前面的笔记说,python中的一切数据类型都是对象 我们在细化下就是:对象可由两部分组成:对象数据和对象方法 针对不同类型的数据对象,有不同的操作对象的方法. 那么我们开始看下字符串对象的常用方法: ...

  2. Hadoop学习(4)-mapreduce的一些注意事项

    关于mapreduce的一些注意细节 如果把mapreduce程序打包放到了liux下去运行, 命令java  –cp  xxx.jar 主类名 如果报错了,说明是缺少相关的依赖jar包 用命令had ...

  3. IDEA插件之alibaba编程规范

    1.做什么 这是阿里巴巴的编码规范插件,规范内容可以查阅 https://github.com/alibaba/p3c/blob/master/阿里巴巴Java开发手册(华山版).pdf 2.File ...

  4. tomcat单机多应用部署配合Nginx负载均衡

    一.Windows 配置tomcat . 安装两个tomcat服务器以上 . 配置环境变量 CATALINA_BASE:D:\servers\Tomcat8 CATALINA_HOME:D:\serv ...

  5. LC 394. Decode String

    问题描述 Given an encoded string, return its decoded string. The encoding rule is: k[encoded_string], wh ...

  6. 从入门到自闭之Python解释器安装

    Python解释器的安装 1 下载 ​ 下载地址:https://www.python.org 选择windows平台的链接进行下载 https://www.python.org/downloads/ ...

  7. Beautifulsoup模块基础用法详解

    目录 Beautifulsoup模块 官方中文文档 介绍 基本使用 遍历文档树 搜索文档树 五种过滤器 **find_all( name , attrs , recursive , text , ** ...

  8. python+django学习一

    pycharm破解地址:https://blog.csdn.net/qq_32811489/article/details/78636049 按照视频写代码,记录关键的地方方便自己记忆, 视频教程地址 ...

  9. css文本超出隐藏 显示三个点

    文本超出显示三个点一般分两种情况 一,单行文本超出隐藏 overflow:hidden; text-overflow:ellipsis; white-space:nowrap; 二,多行文本超出隐藏 ...

  10. bootstrap 处理警告

    $("#id").bootstrapValidator({}).on('success.field.bv', function (e, data) { })