Unknown错误
  • 板块学术版
  • 楼主MARCUSE
  • 当前回复6
  • 已保存回复6
  • 发布时间2023/7/6 10:45
  • 上次更新2023/11/3 11:23:02
查看原帖
Unknown错误
199051
MARCUSE楼主2023/7/6 10:45
#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了

有大佬帮忙找找嘛

2023/7/6 10:45
加载中...