首页 > 其他分享 >BZOJ 1012: [JSOI2008]最大数maxnumber

BZOJ 1012: [JSOI2008]最大数maxnumber

时间:2022-10-25 14:00:24浏览次数:70  
标签:maxnumber now ad 最大数 int JSOI2008 tree ans include


题目链接:​​传送门​

时隔一年再写一遍

#include <iostream>
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <complex>
#include <algorithm>
#include <climits>
#include <queue>
#include <map>
#include <set>
#include <vector>
#include <iomanip>
#define
#define

using namespace std;
typedef long long ll;
struct node {
int l, r, w;
}tree[A];
int n, m, a, b, c, ad, mod, now;
void build(int k, int l, int r) {
tree[k].l = l; tree[k].r = r;
if (l == r) {
tree[k].w = 0;
return;
}
int m = (l + r) >> 1;
build(k << 1, l, m);
build(k << 1 | 1, m + 1, r);
tree[k].w = max(tree[k << 1].w, tree[k << 1 | 1].w);
}
void change(int k, int pos, int val) {
if (tree[k].l == tree[k].r) {
tree[k].w += val;
return;
}
int m = (tree[k].l + tree[k].r) >> 1;
if (pos <= m) change(k << 1, pos, val);
else change(k << 1 | 1, pos, val);
tree[k].w = max(tree[k << 1].w, tree[k << 1 | 1].w);
}
int ask(int k, int l, int r) {
if (tree[k].l >= l and tree[k].r <= r) return tree[k].w;
int m = (tree[k].l + tree[k].r) >> 1, ans = 0;
if (l <= m) ans = max(ans, ask(k << 1, l, r));
if (r > m) ans = max(ans, ask(k << 1 | 1, l, r));
return ans;
}

int main(int argc, char const *argv[]) {
cin >> n >> mod; build(1, 1, n);
for (int i = 1; i <= n; i++) {
char opt; scanf(" %c %d", &opt, &a);
if (opt == 'A') {
a += ad; now++;
change(1, now, a % mod);
}
else {
ad = ask(1, now - a + 1, now);
ad %= mod;
printf("%d\n", ad);
}
}
return 0;
}


标签:maxnumber,now,ad,最大数,int,JSOI2008,tree,ans,include
From: https://blog.51cto.com/lyle/5794683

相关文章

  • BZOJ 1013([JSOI2008]球形空间产生器sphere-gauss消元练习)
    1013:[JSOI2008]球形空间产生器sphereTimeLimit: 1Sec  MemoryLimit: 162MBSubmit: 1181  Solved: 654[​​Submit​​][​​Status​​][​​Discu......
  • 【算法】喜欢算法的朋友,看下乘积最大数组如何写?
    算法题目描述1.数组排序,类型:图算法,简单。2.下一个排列,类型:数组,双指针,中等难度。3.乘积最大数组,类型,数组,中等难度。第一道数组排序算法题目详细描述编写一个JavaAppl......
  • 179. 最大数
    179.最大数给定一组非负整数nums,重新排列每个数的顺序(每个数不可拆分)使之组成一个最大的整数。注意:输出结果可能非常大,所以你需要返回一个字符串而不是整数。 示......
  • T1053 最大数输出 (信息学一本通C++)
     目录 [题目描述]输入三个整数,数与数之间以一个空格分开。输出一个整数,即最大的整数。[输入]输入为一行,包含三个整数,数与数之间以一个空格分开。[输出]输出一行......
  • Problem P18. [算法课贪婪]6和9组成的最大数字
    贪心:把9换成6是不可能的,只有把6换成9,而且要换就换最高位的那个6C++:to_string可以将整数转化为string类型,stoi可以将string转化为int类型,这个好用!#i......
  • 最大数
    https://www.luogu.com.cn/problem/P1198线段树的应用,其中需要一个cnt记录当前已经存放了的个数last记录上次查询的值#include<bits/stdc++.h>usingnamespacestd;......