zoukankan      html  css  js  c++  java
  • 【模板】回滚莫队&不删除莫队

    II.【模板】回滚莫队&不删除莫队

    莫,就硬莫。

    代码:

    #include<bits/stdc++.h>
    using namespace std;
    const int BBB=450;
    int n,m,a[200100],mx[200100],mn[200100],ans,res[200100];
    vector<int>v;
    stack<pair<int,int> >s;
    void Push(int x){
    	if(x>mx[a[x]])s.emplace(a[x],mx[a[x]]),mx[a[x]]=x;
    	if(x<mn[a[x]])s.emplace(-a[x],mn[a[x]]),mn[a[x]]=x;
    	ans=max(ans,mx[a[x]]-mn[a[x]]);
    }
    void Restore(){
    	if(s.top().first>0)mx[s.top().first]=s.top().second;
    	else mn[-s.top().first]=s.top().second;
    	s.pop();
    }
    struct query{
    	int l,r,id;
    	query(int L,int R,int ID){l=L,r=R,id=ID;}
    	friend bool operator<(const query&u,const query&v){return u.r<v.r;}
    };
    vector<query>u[500];
    int read(){
    	int x=0;
    	char c=getchar();
    	while(c<'0'||c>'9')c=getchar();
    	while(c>='0'&&c<='9')x=(x<<3)+(x<<1)+(c^48),c=getchar();
    	return x;
    }
    int main(){
    	n=read(),memset(mn,0x3f,sizeof(mn));
    	for(int i=0;i<n;i++)v.push_back(a[i]=read());
    	sort(v.begin(),v.end()),v.resize(unique(v.begin(),v.end())-v.begin());
    	for(int i=0;i<n;i++)a[i]=lower_bound(v.begin(),v.end(),a[i])-v.begin()+1;
    	m=read();
    	for(int i=1,l,r;i<=m;i++)l=read()-1,r=read()-1,u[l/BBB].emplace_back(l,r,i);
    	for(int i=0;i*BBB<n;i++){
    		sort(u[i].begin(),u[i].end());
    		int lim=min((i+1)*BBB,n);
    		int L=lim,R=L-1;ans=0;
    		for(auto x:u[i]){
    			if(x.r<lim){
    				for(int j=x.l;j<=x.r;j++)Push(j);
    				res[x.id]=ans,ans=0;
    				while(!s.empty())Restore();
    				continue;
    			}
    			while(R<x.r)Push(++R);
    			int tsz=s.size(),tas=ans;
    			while(L>x.l)Push(--L);
    			res[x.id]=ans,ans=tas,L=lim;
    			while(s.size()>tsz)Restore();
    		}
    		while(!s.empty())Restore();
    	}
    	for(int i=1;i<=m;i++)printf("%d\n",res[i]);
    	return 0;
    }
    

  • 相关阅读:
    构建之法 阅读笔记01
    个人作业1 -数组
    进度一
    开课博客
    生活尝试
    人月神话3
    安卓开发工具
    人月神话 2
    Qt 的入门小程序
    提问的智慧 摘抄(How To Ask Questions The Smart Way)
  • 原文地址:https://www.cnblogs.com/Troverld/p/14620542.html
Copyright © 2011-2022 走看看