Problem p02732 (C++)

Buggy submission (status: Runtime Error):
// #include "pch.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <algorithm>
#include <bitset>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <utility>
#include <vector>

#define ll long long
#define fri(n) for (i = 0; i < (n); i++)
#define frj(n) for (j = 0; j < (n); i++)
#define min(p, q) ((p) < (q) ? (p) : (q))
#define max(p, q) ((p) > (q) ? (p) : (q))
#define INF 1000000000000000000 // 10^18
#define INFINT 2000000001       // 2*10^9+1
#define MOD 1000000007
#define MODANOTHER 998244353
#define PI acos(-1)

#define int ll

using namespace std;

signed main(void) {
  // 変数の宣言
  int n, m;
  int h, w;
  static int a[100010];
  static int b[100010];
  char s[110];
  double Ld;

  // よく使う変数
  int i, j, k, l;
  int flag = 0;
  int ans = 0;
  int count = 0;
  int temp = 0;
  int temp1 = 0;
  int temp2 = 0;
  int temp3 = 0;
  static int vec[100010];
  int max = 0;
  int min = INFINT;
  int len = 0;
  int sum = 0;
  int ok = 0;
  int ng = 0;
  char dummy;
  static char stemp[100010];

  // データの読み込み

  scanf("%lld", &n);
  //	scanf_s("%lld",&n);

  //	scanf("%s",&s);
  //	scanf_s("%s",&s,110);

  /*	//scanf("%c",&dummy);
          scanf_s("%c",&dummy);
          for(i=0;i<n;i++){
  //		scanf("%c",&s[i]);
                  scanf_s("%c",&s[i]);
          }*/

  for (i = 0; i < n; i++) {
    scanf("%lld", &a[i]);
    //		scanf_s("%lld",&a[i]);
  }

  //	printf("nは%dです\n", n);
  //	printf("データの読み込み終了\n");
  // 実際の処理

  //	clock_t start=clock();

  for (i = 0; i <= n; i++) {
    b[i] = 0;
  }

  for (i = 0; i < n; i++) {
    b[a[i]]++;
  }

  ans = 0;
  for (i = 1; i <= n; i++) {
    ans = ans + b[i] * (b[i] - 1) / 2;
  }

  for (i = 0; i < n; i++) {
    temp = ans - b[a[i]] + 1;
    if (b[a[i]] == 0)
      temp--;
    printf("%lld\n", temp);
  }

  //	clock_t end=clock();

  //	printf("計算部分終了\n");

  // 出力

  // printf("%d",(d[i-1][j-1]+1)/2);

  //	printf("time=%lf",(double)(end-start)/CLOCKS_PER_SEC);
  //	printf("結果の出力終了\n");

  return 0;
}


Fixed submission:
// #include "pch.h"
#include <math.h>
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>

#include <algorithm>
#include <bitset>
#include <functional>
#include <iostream>
#include <map>
#include <queue>
#include <set>
#include <string>
#include <utility>
#include <vector>

#define ll long long
#define fri(n) for (i = 0; i < (n); i++)
#define frj(n) for (j = 0; j < (n); i++)
#define min(p, q) ((p) < (q) ? (p) : (q))
#define max(p, q) ((p) > (q) ? (p) : (q))
#define INF 1000000000000000000 // 10^18
#define INFINT 2000000001       // 2*10^9+1
#define MOD 1000000007
#define MODANOTHER 998244353
#define PI acos(-1)

#define int ll

using namespace std;

signed main(void) {
  // 変数の宣言
  int n, m;
  int h, w;
  static int a[200010];
  static int b[200010];
  char s[110];
  double Ld;

  // よく使う変数
  int i, j, k, l;
  int flag = 0;
  int ans = 0;
  int count = 0;
  int temp = 0;
  int temp1 = 0;
  int temp2 = 0;
  int temp3 = 0;
  static int vec[100010];
  int max = 0;
  int min = INFINT;
  int len = 0;
  int sum = 0;
  int ok = 0;
  int ng = 0;
  char dummy;
  static char stemp[100010];

  // データの読み込み

  scanf("%lld", &n);
  //	scanf_s("%lld",&n);

  //	scanf("%s",&s);
  //	scanf_s("%s",&s,110);

  /*	//scanf("%c",&dummy);
          scanf_s("%c",&dummy);
          for(i=0;i<n;i++){
  //		scanf("%c",&s[i]);
                  scanf_s("%c",&s[i]);
          }*/

  for (i = 0; i < n; i++) {
    scanf("%lld", &a[i]);
    //		scanf_s("%lld",&a[i]);
  }

  //	printf("nは%dです\n", n);
  //	printf("データの読み込み終了\n");
  // 実際の処理

  //	clock_t start=clock();

  for (i = 0; i <= n; i++) {
    b[i] = 0;
  }

  for (i = 0; i < n; i++) {
    b[a[i]]++;
  }

  ans = 0;
  for (i = 1; i <= n; i++) {
    ans = ans + b[i] * (b[i] - 1) / 2;
  }

  for (i = 0; i < n; i++) {
    temp = ans - b[a[i]] + 1;
    if (b[a[i]] == 0)
      temp--;
    printf("%lld\n", temp);
  }

  //	clock_t end=clock();

  //	printf("計算部分終了\n");

  // 出力

  // printf("%d",(d[i-1][j-1]+1)/2);

  //	printf("time=%lf",(double)(end-start)/CLOCKS_PER_SEC);
  //	printf("結果の出力終了\n");

  return 0;
}