洛谷P1198 [JSOI2008]最大数(单点修改,区间查询)
2024-10-07 06:17:50
简单的线段树单点问题。
问题:读入A
和Q
时,按照读入一个字符会MLE,换成读入字符串就可以了。
#include<bits/stdc++.h>
using namespace std;
#define lson l, mid, root << 1
#define rson mid + 1, r, root << 1 | 1
const int maxn = 200005;
long long MAX[maxn << 2], D, t, xx;
int M, len;
char c[5];
inline void pushDown(int root){
MAX[root] = max(MAX[root << 1], MAX[root << 1 | 1]);
}
void update(int l, int r, int root, int pos, long long x)
{
if(l == r){
MAX[root] = x; return;
}
int mid = (l + r) >> 1;
if(pos <= mid) update(lson, pos, x);
else update(rson, pos, x);
pushDown(root);
}
long long query(int l, int r, int root, int L, int R)
{
if(L == l && R == r){
return MAX[root];
}
int mid = (l + r) >> 1;
if(R <= mid) return query(lson, L, R);
else if(L >= mid + 1) return query(rson, L, R);
else return max(query(lson, L, mid), query(rson, mid + 1, R));
}
int main()
{
scanf("%d%lld", &M, &D);
for(int i = 1; i <= M; i++){
scanf("%s%lld", c, &xx);
if(c[0] == 'A'){
xx = (t * 1LL + xx) % D;
len++;
update(1, M, 1, len, xx);
}
else{
t = query(1, M, 1, (int)(len - xx + 1), len) % D;
printf("%lld\n", t);
}
}
return 0;
}
最新文章
- Android 图文数据JSON解析,金山词霸每日一句API的调用
- 【BZOJ 4598】【SDOI 2016 Round2 Day1 T3】模式字符串
- Java 读取大文件方法
- 【Origin】 叹文
- Regex count lowercase letters
- useful-scripts
- javascript基础DOM操作
- 项目中常用方法总结(将将DataTable数据集映射到实体对象)【转】
- 触发按钮改变panel面板上的小圆圈颜色
- leetcode Divide Two Integers python
- SQL SERVER 2000/2005/2008数据库数据迁移到Oracle 10G细述
- win10 uwp BadgeLogo 颜色
- 使用QPlainText代替QText
- luogu||P1776||宝物筛选||多重背包||dp||二进制优化
- 绑定到外部验证服务LDAP、配置 autofs
- MySQL 5.7双主同步部分表
- socket.io api 总结
- Kubernetes介绍
- 2016-2017 National Taiwan University World Final Team Selection Contest (Codeforces Gym) 部分题解
- java基础-数组的折半查找原理