2 条题解

  • 0
    @ 2026-8-4 10:12:42
    #include<bits/stdc++.h>
    using namespace std;
    typedef long long ll;
    int n,Q,B,a[100010],lsh[100010];
    struct N{
    	int l,r,id;
    }q[100010];
    bool cmp(N a,N b){
    	if(a.l/B!=b.l/B)return a.l<b.l;
    	return a.r<b.r;
    }
    int cnt[100010],s;
    void add(int x){
    	cnt[a[x]]++;
    	if(cnt[a[x]]>cnt[s])s=a[x];
    }
    int cntl[100010],vis[100010],tsp;
    void addl(int x){
    	if(vis[a[x]]<tsp){
    		vis[a[x]]=tsp;cntl[a[x]]=0;
    	}
    	cntl[a[x]]++;
    	if(cnt[a[x]]+cntl[a[x]]>cnt[s]+cntl[s])s=a[x];
    }
    int cntc[100010];
    int calc(int l,int r){
    	for(int i=l;i<=r;i++)cntc[a[i]]=0;
    	int mx=0;
    	for(int i=l;i<=r;i++){
    		cntc[a[i]]++;
    		if(cntc[a[i]]>cntc[mx])mx=a[i];
    	}
    	return mx;
    }
    int ans[100010],ans2[100010];
    int main(){
    	ios::sync_with_stdio(0);
    	cin.tie(0);
    	cin>>n>>Q;
    	B=sqrt(n);
    	for(int i=1;i<=n;i++){
    		cin>>a[i];lsh[i]=a[i];
    	}
    	sort(lsh+1,lsh+1+n);
    	int ln=unique(lsh+1,lsh+1+n)-lsh-1;
    	for(int i=1;i<=n;i++){
    		a[i]=lower_bound(lsh+1,lsh+1+ln,a[i])-lsh;
    	}
    	for(int i=1;i<=Q;i++){
    		cin>>q[i].l>>q[i].r;q[i].id=i;q[i].l++;
    	}
    	sort(q+1,q+1+Q,cmp);
    	for(int i=0,j=1;i<=n/B;i++){
    		int R=min(n,(i+1)*B-1);
    		int l=R+1,r=R;
    		s=0;
    		memset(cnt,0,sizeof(cnt));
    		for(;j<=Q&&q[j].l/B==i;j++){
    			if(q[j].l/B==q[j].r/B){
    				ans[q[j].id]=calc(q[j].l,q[j].r);
    				ans2[q[j].id]=cntc[ans[q[j].id]];
    				continue;
    			}
    			while(r<q[j].r)add(++r);
    			int la=s;
    			tsp++;
    			if(vis[s]<tsp){
    				vis[s]=tsp;cntl[s]=0;
    			}
    			while(l>q[j].l)addl(--l);
    			ans[q[j].id]=s;
    			ans2[q[j].id]=cntl[s]+cnt[s];
    			s=la;
    			l=R+1;
    		}
    	}
    	for(int i=1;i<=Q;i++){
    		cout<<lsh[ans[i]]<<" "<<ans2[i]<<'\n';
    	}
    	return 0;
    }
    
    • 0
      @ 2026-8-2 16:06:19

      石山分块,具体请参考 P4168 [Violet] 蒲公英

      #include<bits/stdc++.h>
      using namespace std;
      const int N=1e5+10,M=sqrt(N)+10;
      int s[M][N],p[M][M],a[N],b[N],c[N],B;
      signed main()
      {
      	int n,q;cin>>n>>q;B=sqrt(n);int len=(n-1)/B+1;
      	for(int i=1;i<=n;i++)cin>>a[i],b[i]=a[i];
      	sort(b+1,b+n+1);int K=unique(b+1,b+n+1)-b-1;
      	for(int i=1;i<=n;i++)a[i]=lower_bound(b+1,b+K+1,a[i])-b;
      	for(int i=1;i<=len;i++)
      	{
      		for(int j=1;j<=K;j++)c[j]=0;
      		int mx=-1e9,id=1e9;
      		for(int j=i;j<=len;j++)
      		{
      			for(int k=(j-1)*B+1;k<=min(n,j*B);k++)
      			{
      				c[a[k]]++;
      				if(c[a[k]]>mx)mx=c[a[k]],id=a[k];
      				else if(c[a[k]]==mx)id=min(id,a[k]);
      			}
      			p[i][j]=id;
      		}
      	}
      	for(int i=1;i<=len;i++)
      	{
      		for(int j=1;j<=K;j++)s[i][j]=s[i-1][j];
      		for(int j=(i-1)*B+1;j<=min(n,i*B);j++)s[i][a[j]]++;
      	}
      	while(q--)
      	{
      		int l,r;cin>>l>>r;l++;
      		int bl=(l-1)/B+1,br=(r-1)/B+1;
      		if(br-bl<=1)
      		{
      			for(int i=l;i<=r;i++)c[a[i]]=0;
      			int mx=-1e9,id=1e9;
      			for(int i=l;i<=r;i++)
      			{
      				c[a[i]]++;
      				if(c[a[i]]>mx)mx=c[a[i]],id=a[i];
      				else if(c[a[i]]==mx)id=min(id,a[i]);
      			}
      			cout<<b[id]<<' '<<mx<<'\n';
      		}
      		else 
      		{
      			for(int i=l;i<=bl*B;i++)c[a[i]]=s[br-1][a[i]]-s[bl][a[i]];
      			for(int i=(br-1)*B+1;i<=r;i++)c[a[i]]=s[br-1][a[i]]-s[bl][a[i]];
      			int id=p[bl+1][br-1],mx=s[br-1][id]-s[bl][id];c[id]=mx;
      			for(int i=l;i<=bl*B;i++)
      			{
      				c[a[i]]++;
      				if(c[a[i]]>mx)mx=c[a[i]],id=a[i];
      				else if(c[a[i]]==mx)id=min(id,a[i]);
      			}
      			for(int i=(br-1)*B+1;i<=r;i++)
      			{
      				c[a[i]]++;
      				if(c[a[i]]>mx)mx=c[a[i]],id=a[i];
      				else if(c[a[i]]==mx)id=min(id,a[i]);
      			}
      			cout<<b[id]<<' '<<mx<<'\n';
      		}
      	}
      	return 0;
      }
      • 1

      静态区间众数查询(Static Range Mode Query)

      信息

      ID
      8146
      时间
      500ms
      内存
      1024MiB
      难度
      8
      标签
      (无)
      递交数
      19
      已通过
      6
      上传者