BZOJ 1012 最大数maxnumber 线段树

题目链接:

https://www.lydsy.com/JudgeOnline/problem.php?id=1012

题目大意:

见链接

思路:

直接用线段树模拟一下就可以了。

 1 #include<bits/stdc++.h>
 2 #define IOS ios::sync_with_stdio(false);//不可再使用scanf printf
 3 #define Max(a, b) ((a) > (b) ? (a) : (b))//禁用于函数,会超时
 4 #define Min(a, b) ((a) < (b) ? (a) : (b))
 5 #define Mem(a) memset(a, 0, sizeof(a))
 6 #define Dis(x, y, x1, y1) ((x - x1) * (x - x1) + (y - y1) * (y - y1))
 7 #define MID(l, r) ((l) + ((r) - (l)) / 2)
 8 #define lson ((o)<<1)
 9 #define rson ((o)<<1|1)
10 #pragma comment(linker, "/STACK:102400000,102400000")//栈外挂
11 using namespace std;
12 inline int read()
13 {
14     int x=0,f=1;char ch=getchar();
15     while (ch<'0'||ch>'9'){if (ch=='-') f=-1;ch=getchar();}
16     while (ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}
17     return x*f;
18 }
19 
20 typedef long long ll;
21 const int maxn = 1000000 + 10;
22 const int maxm = 1000000 + 10;
23 const int mod = 1000000007;//const引用更快,宏定义也更快
24 const int INF = 1000000007;
25 struct node
26 {
27     ll l, r, x;
28 }tree[maxn];
29 void build(int o, ll l, ll r)
30 {
31     tree[o].l = l, tree[o].r = r;
32     if(l == r)return;
33     ll m = MID(l, r);
34     build(lson, l, m);
35     build(rson, m + 1, r);
36 }
37 ll p, v;
38 void update(int o)
39 {
40     if(tree[o].l == tree[o].r)
41     {
42         tree[o].x = v;
43         return;
44     }
45     if(p <= tree[lson].r)update(lson);
46     else update(rson);
47     tree[o].x = Max(tree[lson].x, tree[rson].x);
48 }
49 ll ql, qr;
50 ll ans;
51 void query(int o)
52 {
53     if(ql <= tree[o].l && qr >= tree[o].r)
54     {
55         ans = Max(ans, tree[o].x);
56         return;
57     }
58     if(ql <= tree[lson].r)query(lson);
59     if(qr >= tree[rson].l)query(rson);
60 }
61 int main()
62 {
63     ll n, d;
64     scanf("%lld%lld", &n, &d);
65     build(1, 1, n);
66     p = 1;
67     ll t = 0, x;
68     char s[10];
69     while(n--)
70     {
71         scanf("%s%lld", s, &x);
72         if(s[0] == 'A')
73         {
74             v = t + x;
75             v %= d;
76             update(1);
77             p++;
78         }
79         else
80         {
81             ql = p - x;
82             qr = p - 1;
83             ans = 0;
84             query(1);
85             t = ans;
86             printf("%lld
", ans);
87         }
88     }
89     return 0;
90 }
原文地址:https://www.cnblogs.com/fzl194/p/9623915.html