• bzoj 1012 [JSOI2008]最大数maxnumber 线段树


    题意:

    现在请求你维护一个数列,要求提供以下两种操作:

    1、 查询操作。语法:Q L 功能:查询当前数列中末尾L个数中的最大的数,并输出这个数的值。限制:L不超过当前数列的长度。

    2、 插入操作。语法:A n 功能:将n加上t,其中t是最近一次查询操作的答案(如果还未执行过查询操作,则t=0),并将所得结果对一个固定的常数D取模,将所得答案插入到数列的末尾。限制:n是非负整数并且在长整范围内。

    注意:初始时数列是空的,没有一个数

    题解:

    直接上线段树即可,记录一下我的新线段树基础板子

    #include <iostream>
    #include <vector>>
    #define endl '
    '
    #define ll long long
    using namespace std;
    struct segnode {
    	int l,r;ll mx;
    	int mid(){return (r+l)>>1;}
    	int len(){return r-l+1;}
    	bool cover(int s,int t){return s<=l&&t>=r;}
    	bool cross(int s,int t){return !(t<l||s>r);}
    };
    struct segtree{
    #define nd  seg[now]
    #define ndl seg[now<<1]
    #define ndr seg[now<<1|1]
     	vector<segnode> seg;
    	segtree(int n){seg.resize((n<<2)+10); maketree(1,n);}
    	void pushup(int now){nd.mx=max(ndl.mx,ndr.mx);}
    	void maketree(int s,int t,int now=1){
    		nd={s,t,0};
    		if(s==t) return ;
    		maketree(s,nd.mid(),now<<1); maketree(nd.mid()+1,t,now<<1|1);
    	}
    	void update(int pos,ll x,int now=1){
    		if(!nd.cross(pos,pos)) return;
    		if(nd.len()==1){nd.mx=x; return;}
    		update(pos,x,now<<1); update(pos,x,now<<1|1);
    		pushup(now);
    	}
    	ll query(int s,int t,int now=1){
    		if(!nd.cross(s,t)) return 0;
    		if(nd.cover(s,t)) return nd.mx;
    		return max(query(s,t,now<<1),query(s,t,now<<1|1));
    	}
    };
    int main() {
    	ios::sync_with_stdio(false);cin.tie(0);
    	ll n,m;
            cin>>n>>m;
            segtree tree(n);
    	int len=0,k=n;
    	string s;ll x,last=0;
    	while(k--){
    		cin>>s>>x;
    		if(s[0]=='Q')cout<<(last=tree.query(len-x+1,len))<<endl;
    		else tree.update(++len,(last+x)%m);
    	}
    	return 0;
    }
    

      

  • 相关阅读:
    第15届创新英语大赛初赛第二阶段题目
    13.递归第一次
    13.递归第一次
    13.递归第一次
    13.递归第一次
    Algs4-1.3.19给出一段代码,删除链表的尾结点
    Algs4-1.3.18下面链表在代码的作用
    Algs4-1.3.17从文件中读取信息生成Transaction对象数组
    Algs4-1.3.16从文件中读取日期生成日期对象数组
    Algs4-1.3.15打印Queue中倒数第k个元素的值
  • 原文地址:https://www.cnblogs.com/nervendnig/p/10211647.html
Copyright © 2020-2023  润新知