Breed Counting S

作者: qiqi 分类: 前缀和/差分 发布时间: 2025-10-23 20:28

提交链接

题目描述:armer John 的 N 头奶牛,从左到右编号为 1…N,排成一队。所有牛都可以分为三个品种,每头牛都有一个品种编号(只能为 1,2,3 中的一个)。FJ 有 Q 个询问,每个询问希望求出某个区间内每个品种奶牛的数量。

#include <bits/stdc++.h>
using namespace std;

struct cow
{
	int s1, s2, s3;
} x[100001];

int main()
{
	int n, q, a, b;
	int pz;
	scanf("%d%d", &n, &q);

	x[0].s1 = x[0].s2 = x[0].s3 = 0;
	for (int i = 1; i <= n; i++)
	{
		scanf("%d", &pz);
		int pz1 = 0, pz2 = 0, pz3 = 0;
		if (pz == 1)
			pz1 = 1;
		else if (pz == 2)
			pz2 = 1;
		else
			pz3 = 1;

		x[i].s1 = x[i - 1].s1 + pz1;
		x[i].s2 = x[i - 1].s2 + pz2;
		x[i].s3 = x[i - 1].s3 + pz3;
	}

	while (q--)
	{
		scanf("%d%d", &a, &b);
		int c1, c2, c3;
		c1 = x[b].s1 - x[a - 1].s1;
		c2 = x[b].s2 - x[a - 1].s2;
		c3 = x[b].s3 - x[a - 1].s3;
		printf("%d %d %d\n", c1, c2, c3);
	}
	return 0;
}

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

标签云