Cinsin hesablanması#11159

Cinsin hesablanması (Həll təhlili)

Üç tam ədədli massiv elan edək: s[i]~(1 \le i \le 3). cinsli inəklər üçün prefiks cəmləri massivində saxlanılacaq.

sorğusuna cavab aşağıdakı qaydada hesablanır:

Nümunə

Verilmiş nümunə üçün s[i]~(1 \le i \le 3) prefiks cəmləri massivləri aşağıdakı kimi olacaq:

intervalı üzrə sorğuya baxaq:

Alqoritmin realizasiyası

Qismi cəmləri saxlamaq üçün massiv elan edək.

#define MAX 100001
int s[4][MAX];

Giriş məlumatlarını oxuyuruq.

scanf("%d %d", &n, &q);

Qismi cəmlər massivlərini hesablayırıq.

memset(s, 0, sizeof(s));
for (i = 1; i <= n; i++)
{
  scanf("%d", &x);
  for (j = 1; j <= 3; j++)
    s[j][i] = s[j][i - 1];
  s[x][i]++;
}

sorğunu ardıcıl olaraq emal edirik.

for (i = 0; i < q; i++)
{
   scanf("%d %d", &a, &b);
   printf("%d %d %d\n", s[1][b] - s[1][a - 1], s[2][b] - s[2][a - 1], 
                        s[3][b] - s[3][a - 1]);
}

Python realizasiyası

import sys

Giriş məlumatlarını oxuyuruq.

n, q = map(int, input().split())

Qismi cəmləri saxlamaq üçün siyahı elan edək.

s = [[0] * (n + 1) for _ in range(4)]

Qismi cəmlər massivlərini hesablayırıq.

for i in range(1, n + 1):
  x = int(input())
  for j in range(1, 4):
    s[j][i] = s[j][i - 1]
  s[x][i] += 1

sorğunu ardıcıl olaraq emal edirik.

for _ in range(q):
  a, b = map(int, input().split())
  print(s[1][b] - s[1][a - 1], s[2][b] - s[2][a - 1], 
        s[3][b] - s[3][a - 1])