首页 > 其他分享 >【线段树入门】 P1198 最大数(区间最大值+无懒标记+末尾插入)

【线段树入门】 P1198 最大数(区间最大值+无懒标记+末尾插入)

时间:2023-12-12 12:02:19浏览次数:29  
标签:P1198 最大数 int res mid len 无懒 long define

 1 //笔记-自用
 2 //#pragma GCC optimize("Ofast")
 3 //#pragma GCC optimize("unroll-loops")
 4 #define _CRT_SECURE_NO_WARNINGS
 5 #define All(a) a.begin(),a.end()
 6 #define INF 2147483647
 7 #include<bits/stdc++.h>
 8 #include<numeric>
 9 using namespace std;
10 typedef unsigned long long ull;
11 #define int long long//再也不用担心开longlong了><
12 typedef pair<int, int>PII;
13 const int N = 2e5 + 5;
14 #define lc p<<1
15 #define rc p<<1|1
16 struct node {
17     int l, r, val;
18 }tr[N*4];
19 int w[N];
20 void pushup(int p) {
21     tr[p].val = max(tr[lc].val, tr[rc].val);
22 }
23 void build(int p, int l, int r) {
24     tr[p] = { l,r,w[l]};
25     if (l == r)return;
26     int mid = l + r >> 1;
27     build(lc, l, mid);
28     build(rc, mid + 1, r);
29     pushup(p);
30 }
31 void update(int p, int x,int k) {//末尾插入操作等价于单点修改+扩容,所以建树的时候就应该建到最大值,并且用一个变量代表数组真实长度
32     if (x <= tr[p].l && tr[p].r <= x) {
33         tr[p].val = k;
34         return;
35     }
36     int mid = tr[p].l + tr[p].r >> 1;
37     if (x <= mid)update(lc, x, k);
38     if (x > mid)update(rc, x, k);
39     pushup(p);
40 }
41 int query(int p, int x, int y) {
42     if (x <= tr[p].l && tr[p].r <= y) {
43         return tr[p].val;
44     }
45     int mid = tr[p].l + tr[p].r >> 1;
46     int res = 0;
47     if (x <= mid)res = max(res, query(lc, x, y));
48     if (y > mid)res = max(res, query(rc, x, y));
49     return res;
50 }
51 signed main() {
52     ios::sync_with_stdio(false);
53     cin.tie(nullptr);
54     cout.tie(nullptr);
55     int n,mod;
56     int pre=0, len=0;
57     cin >> n >> mod;
58     build(1, 1, n);
59     while (n--) {
60         char op; int x;
61         cin >> op >> x;
62         if (op == 'A') {//末尾插入操作等价于单点修改+扩容,所以建树的时候就应该建到最大值,并且用一个变量代表数组真实长度
63             update(1, ++len, (x+pre) % mod);
64         }
65         else {
66             pre = query(1, len-x+1, len);
67             cout << pre << "\n";
68         }
69     }
70 
71 
72 }

 

标签:P1198,最大数,int,res,mid,len,无懒,long,define
From: https://www.cnblogs.com/iscr/p/17896488.html

相关文章

  • C++前缀和算法应用:矩形区域不超过 K 的最大数值和
    题目给你一个mxn的矩阵matrix和一个整数k,找出并返回矩阵内部矩形区域的不超过k的最大数值和。题目数据保证总会存在一个数值和不超过k的矩形区域。示例1:输入:matrix=[[1,0,1],[0,-2,3]],k=2输出:2解释:蓝色边框圈出来的矩形区域[[0,1],[-2,3]]的数值和是......
  • 【算法题】6939. 数组中的最大数对和
    题目:给你一个下标从0开始的整数数组nums。请你从nums中找出和最大的一对数,且这两个数数位上最大的数字相等。返回最大和,如果不存在满足题意的数字对,返回-1。示例1:输入:nums=[51,71,17,24,42]输出:88解释:i=1和j=2,nums[i]和nums[j]数位上最大的数字相等,且这......
  • 可以被K整除连通块的最大数目
    给你一棵n个节点的无向树,节点编号为0到n-1。给你整数n和一个长度为n-1的二维整数数组edges,其中edges[i]=[ai,bi]表示树中节点ai和bi有一条边同时给你一个下标从0开始长度为n的整数数组values,其中values[i]是第i个节点的值。再给你一个整数......
  • 6574: 最大数 线段树/单点加/求区间最大值
    描述 给定一个正整数数列a1,a2,a3,⋯,an,每一个数都在0~p–1之间。可以对这列数进行两种操作:添加操作:向序列后添加一个数,序列长度变成n+1;询问操作:询问这个序列中最后L个数中最大的数是多少。程序运行的最开始,整数序列为空。写一个程序,读入操作的序列,并输出询问操作的......
  • 贪心算法--拼接最大数字问题
    博客地址:https://www.cnblogs.com/zylyehuo/#-*-coding:utf-8-*-fromfunctoolsimportcmp_to_keydefxy_cmp(x,y):ifx+y<y+x:return1#表示x>yelifx+y>y+x:return-1#表示x<yelse:re......
  • QComboBox在ubuntu下不显示滚动条问题,下拉框出现位置不固定问题,设置显示最大数量不生
    这里的Ubuntu指的是银河麒麟,问题也是在麒麟下出现的。没有在Ubuntu试过是否有同样的问题。但是估计也差不多,毕竟国产系统跟Ubuntu本来就纠缠不清。用QT写了一个QComboBox,自定义了一些样式,在Windows下显示正常,但是在Ubuntu下不显示滚动条,下拉框位置根据当前选项变化而不是固定显示......
  • #yyds干货盘点# LeetCode程序员面试金典:矩形区域不超过 K 的最大数值和
    1.简述:给你一个mxn的矩阵matrix和一个整数k,找出并返回矩阵内部矩形区域的不超过k的最大数值和。题目数据保证总会存在一个数值和不超过k的矩形区域。 示例1:输入:matrix=[[1,0,1],[0,-2,3]],k=2输出:2解释:蓝色边框圈出来的矩形区域 [[0,1],[-2,3]] 的数值和是......
  • 面试题 16.07. 最大数值 ——一种基于乘法和位运算的解题思路
    剧透警告,没写过的勿触题目:编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。qwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqqwqq......
  • 最大数
    题目描述设有\(n\)个正整数\((n\leq20)\),将它们联接成一排,组成一个最大的多位整数。输入格式第一行一个正整数\(n\)。第二行\(n\)个正整数,空格隔开。输出格式连接成的多位数样例样例输入1313312343样例输出134331213代码#include<bits/stdc++.h>usingnam......
  • 619. 只出现一次的最大数字
    619.只出现一次的最大数字SQL架构MyNumbers表:+-------------+------+|ColumnName|Type|+-------------+------+|num|int|+-------------+------+这张表没有主键。可能包含重复数字。这张表的每一行都含有一个整数。 单一数字是在MyNumbers......