BZOJ1012: [JSOI2008]最大数maxnumber

Posted Blue233333

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BZOJ1012: [JSOI2008]最大数maxnumber相关的知识,希望对你有一定的参考价值。

给定n<=200000个操作:单点插入,查最后若干个数的Max,强制在线。

在线个鬼啊至少我空间还是可以先分配的,把序列倒过来,分配好空间,每个查询就是一个前缀Max了。

技术分享图片
 1 #include<stdio.h>
 2 #include<string.h>
 3 #include<algorithm>
 4 #include<stdlib.h>
 5 //#include<queue>
 6 //#include<math.h>
 7 //#include<time.h>
 8 //#include<iostream>
 9 using namespace std;
10 
11 int n,mod;
12 #define maxn 200011
13 struct BIT
14 {
15     int a[maxn],n;
16     void clear(int m) {n=m; for (int i=1;i<=n;i++) a[i]=-0x7fffffff;}
17     void add(int x,int v) {for (;x<=n;x+=x&-x) a[x]=max(a[x],v);}
18     int query(int x) {int ans=0; for (;x;x-=x&-x) ans=max(ans,a[x]); return ans;}
19 }t;
20 
21 struct Point{int x; bool w;}a[maxn];
22 int main()
23 {
24     scanf("%d%d",&n,&mod);
25     char id[5];
26     int tot=0;
27     for (int i=1;i<=n;i++)
28     {
29         scanf("%s%d",id,&a[i].x);
30         a[i].w=(id[0]==A);
31         tot+=(id[0]==A);
32     }
33     t.clear(tot);
34     int last=0;
35     for (int i=1;i<=n;i++)
36     {
37         if (a[i].w) t.add(tot--,(a[i].x+0ll+last)%mod);
38         else printf("%d\n",(last=t.query(tot+a[i].x)));
39     }
40     return 0;
41 }
View Code

 

以上是关于BZOJ1012: [JSOI2008]最大数maxnumber的主要内容,如果未能解决你的问题,请参考以下文章

bzoj1012[JSOI2008]最大数maxnumber

BZOJ 1012: [JSOI2008]最大数maxnumber

BZOJ1012: [JSOI2008]最大数maxnumber [线段树]

单调栈 BZOJ1012 [JSOI2008]最大数maxnumber

BZOJ1012:[JSOI2008]最大数——题解

BZOJ 1012 [JSOI2008]最大数maxnumber