提一嘴,我递交的代码是copy的向梦洋的(当时我觉得我的代码和他的没什么区别,就检验一下他是不是故意发给我错误代码的),这才是我的代码:

#include<bits/stdc++.h>
#define int long long
using namespace std;
int n,m,c[514514],x,y;
int t[514514],vis[514514];
int fi[514514],ans[514514];
struct jj{
	int first,second,xiab;
};
jj p[514514];
bool cmp(jj a,jj b){
	int ra=a.first,rb=b.first;
	int la=a.second,lb=b.second;
	if(ra!=rb) return ra>rb;
	return la>lb;
}

int lowbit(int x){
    return x & -x;
}
void add(int x,int k){
    for(int i = x; i <= n; i += lowbit(i))
    t[i] +=k;
}
long long sum(int l){
    long long sum = 0;
    for(int i = l; i; i -= lowbit(i))
        sum += t[i];
    return sum;
}
int mp[514514]={0};
signed main(){
	cin>>n>>m;
	//return 0;
	for(int i=1;i<=n;i++)cin>>c[i];
	for(int i=1;i<=n;i++){
		int y=c[i];
		if(vis[y]) fi[i]=vis[y];
		vis[y]=i;
	}
	for(int i=1;i<=m;i++){
		cin>>x>>y;
		p[i]={y,x,i}; 
	}
	sort(p+1,p+m+1,cmp);
	for(int i=1;i<=n;i++) {
		if(vis[c[i]]==i) 
		add(i,1);
	}
	y=n;
	for(int i=1;i<=m;i++){
		int y2=p[i].first,x2=p[i].second;
		while(y>y2){
			if(fi[y]>0)add(fi[y],1);
			y--;
		}
		int zhi=0;
		if(x2-1==0)zhi=sum(y2);
		else zhi=sum(y2)-sum(x2-1);
		ans[p[i].xiab]=zhi;
	}
	for(int i=1;i<=m;i++){
		cout<<ans[i]<<endl;
	}
}

感谢向梦洋让我A了第三道题!!!

3 条评论

  • @ 2025-8-25 15:07:11

    煎饼答案里面去!你看你的头!答案~~~答案!! 九敏…… 九敏……

    • @ 2025-8-25 8:54:01

      ......

      • @ 2025-8-24 22:56:29

        どういたしましてどういたしまして (I v I).

        👍 3
        • 1