1 条题解

  • 0
    @ 2024-6-1 19:05:06
    #include <bits/stdc++.h>
    using namespace std;
    const int N=15005;
    int n,m,k,s,t,now[15],a[N],nxt[N];
    int f[N][21]; 
    int main()
    {
    //	freopen("in.txt","r",stdin); 
    	int T;cin>>T;
    	while (T--){
    		cin>>n;
    		for (int i=1;i<=n;++i) cin>>a[i];
    		memset(now,0,sizeof(now));
    		nxt[n+1]=n+1;
    		for (int i=n;i>=1;--i) {
    			if (now[a[i]]==0) nxt[i]=i;
    			else nxt[i]=now[a[i]]+1;
    			now[a[i]]=i;
    		}
    		for (int i=1;i<=n+1;++i) f[i][0]=nxt[i];
    		for (int j=1;j<=20;++j)
    			for (int i=1;i<=n+1;++i)
    				f[i][j]=f[f[i][j-1]][j-1];
    		cin>>m;int l,r;
    		for (int i=1;i<=m;++i){
    			cin>>l>>r;
    			int ans=0;
    			while (l<=r){
    				for (int j=20;j>=0;--j)
    					if (f[l][j]<=r) l=f[l][j];
    				if (f[l][0]==r+1) break;
    				else ans++,l++;
    			}
    			cout<<ans<<"\n";
    		}
    	}
    }
    
    • 1

    信息

    ID
    782
    时间
    1000ms
    内存
    512MiB
    难度
    10
    标签
    递交数
    1
    已通过
    1
    上传者