Submission #67458763
Source Code Expand
Copy
#include <stdio.h>#include <stdlib.h>#include <inttypes.h>#define MAX 8192int bit_table[MAX];void bit_add(int pos, int value) {pos++;while (pos <= MAX) {bit_table[pos - 1] += value;pos += pos & (-pos);}}int bit_sum(int pos) {int sum = 0;pos++;while (pos > 0) {sum += bit_table[pos - 1];
#include <stdio.h> #include <stdlib.h> #include <inttypes.h> #define MAX 8192 int bit_table[MAX]; void bit_add(int pos, int value) { pos++; while (pos <= MAX) { bit_table[pos - 1] += value; pos += pos & (-pos); } } int bit_sum(int pos) { int sum = 0; pos++; while (pos > 0) { sum += bit_table[pos - 1]; pos -= pos & (-pos); } return sum; } int N; int A[MAX]; struct youso_s { int value, idx; }; int cmp(const void* x, const void* y) { struct youso_s a = *(const struct youso_s*)x, b = *(const struct youso_s*)y; return a.value < b.value ? -1 : a.value > b.value; } struct youso_s youso[MAX]; int main(void) { int i, j, k; int64_t ans = 0; if (scanf("%d", &N) != 1) return 1; for (i = 0; i < N; i++) { if (scanf("%d", &A[i]) != 1) return 1; youso[i].value = A[i]; youso[i].idx = i; } /* 下から処理する */ qsort(youso, N, sizeof(*youso), cmp); for (i = 0; i < N; ) { /* 同じ高さのやつをまとめて処理する */ for (j = i; j < N && youso[j].value == youso[i].value; j++) { /* これまでのやつ (すなわち、これより小さい) の数を前後に分けて求める */ int pos = youso[j].idx; int mae = bit_sum(pos); int ato = bit_sum(N) - mae; ans += (int64_t)mae * ato; } /* この高さのやつを仲間に加える */ for (k = i; k < j; k++) { bit_add(youso[k].idx, 1); } i = j; } printf("%" PRId64 "\n", ans); return 0; }
Submission Info
Submission Time | |
---|---|
Task | A - Count Triplets |
User | mikecat |
Language | C (gcc 12.2.0) |
Score | 200 |
Code Size | 1498 Byte |
Status | AC |
Exec Time | 2 ms |
Memory | 1824 KiB |
Judge Result
Set Name | Sample | All | ||||
---|---|---|---|---|---|---|
Score / Max Score | 0 / 0 | 200 / 200 | ||||
Status |
|
|
Set Name | Test Cases |
---|---|
Sample | s1.txt, s2.txt, s3.txt |
All | 01.txt, 02.txt, 03.txt, 04.txt, 05.txt, 06.txt, 07.txt, 08.txt, 09.txt, 10.txt, 11.txt, 12.txt, 13.txt, 14.txt, s1.txt, s2.txt, s3.txt |
Case Name | Status | Exec Time | Memory |
---|---|---|---|
01.txt | AC | 1 ms | 1664 KiB |
02.txt | AC | 1 ms | 1756 KiB |
03.txt | AC | 1 ms | 1656 KiB |
04.txt | AC | 0 ms | 1652 KiB |
05.txt | AC | 2 ms | 1736 KiB |
06.txt | AC | 2 ms | 1824 KiB |
07.txt | AC | 1 ms | 1744 KiB |
08.txt | AC | 1 ms | 1760 KiB |
09.txt | AC | 2 ms | 1752 KiB |
10.txt | AC | 1 ms | 1704 KiB |
11.txt | AC | 1 ms | 1740 KiB |
12.txt | AC | 1 ms | 1692 KiB |
13.txt | AC | 1 ms | 1716 KiB |
14.txt | AC | 1 ms | 1672 KiB |
s1.txt | AC | 0 ms | 1612 KiB |
s2.txt | AC | 0 ms | 1660 KiB |
s3.txt | AC | 0 ms | 1736 KiB |