社区讨论

Unknown错误

学术版参与者 4已保存回复 6

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
6 条
当前快照
1 份
快照标识符
@lo2bpd01
此快照首次捕获于
2023/10/23 11:13
2 年前
此快照最后确认于
2023/11/03 11:23
2 年前
查看原帖
CPP
#include <bits/stdc++.h>
using namespace std;
const int N = 500000 + 10;
int read(){
	char ch; int sum = 0,flag = 1;
	ch = getchar();
	while(ch < '0' || ch > '9'){if(ch == '-') flag = -flag; ch = getchar();}
	while(ch >= '0' && ch <= '9'){sum = sum * 10 + ch - '0'; ch = getchar();}
	return sum *flag;
}
int n,a[N],lft,rgt,q,sum;
int l,r,ans[N];
map <int,int> cnt;
struct node{
	int id,l,r;
}b[N];
bool cmp(node a,node b){
	if(a.l == b.l) return a.r < b.r;
	return a.l < b.l;
}
void Del(int x){
	cnt[a[x]]--;
	if(cnt[a[x]] == 1) sum--;
	if(cnt[a[x]] == 2) sum++;
}
void Add(int x){
	cnt[a[x]]++;
	if(cnt[a[x]] == 2) sum++; 
	if(cnt[a[x]] == 3) sum--;
}
signed main(){
	n = read(); q = read();
	for(int i = 1; i <= n; i++){
		a[i] = read();
	}
	for(int i = 1; i <= q; i++){
	    b[i].l = read(); b[i].r = read();	
		b[i].id = i; 
	}
	sort(b + 1,b + q + 1,cmp);
	for(int i = 1; i <= q; i++){
		while(lft < b[i].l) Del(lft++);
		while(lft > b[i].l) Add(--lft);
		while(rgt > b[i].r) Del(rgt--);
		while(rgt < b[i].r) Add(++rgt);
		ans[b[i].id] = sum;
	}
	for(int i = 1; i <= q; i++){
		cout << ans[i] << endl;
	}
	return 0;
}
莫队,但是Unknown了
有大佬帮忙找找嘛

回复

6 条回复,欢迎继续交流。

正在加载回复...