teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

4

コードの改善 (search の呼び出しを 1つにまとめた)

2021/09/07 14:03

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,6 +1,6 @@
1
1
  C で書いてみました。単純なコードなので、時間制限に引っかかるかもしれません。
2
2
  ```C
3
- #include <stdio.h> // scanf, printf
3
+ #include <stdio.h> // scanf, printf
4
4
 
5
5
  int search(int v[], int n, int x)
6
6
  {
@@ -17,21 +17,18 @@
17
17
  {
18
18
  static int v[200002];
19
19
  v[0] = 0;
20
- int n = 2, q, c, x;
20
+ int q, c, x, n = 2;
21
21
  scanf("%d%d", &v[1], &q);
22
22
  while (--q >= 0) {
23
23
  scanf("%d%d", &c, &x);
24
+ int i = search(v, n, x);
24
25
  if (c == 1) {
25
- int i = search(v, n, x);
26
- for (int j = n; j > i; j--) v[j] = v[j-1];
26
+ for (int j = n++; j > i; j--) v[j] = v[j-1];
27
27
  v[i] = x;
28
- n++;
29
28
  }
30
- else {
31
- int i = search(v, n, x);
32
- printf("%d\n", v[i] - v[i-1]);
29
+ else printf("%d\n", v[i] - v[i-1]);
33
- }
34
30
  }
35
31
  }
32
+
36
33
  ```
37
34
  これのどこが分からないのかをコメントしてください。

3

不要なコードの削除

2021/09/07 14:03

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -16,7 +16,6 @@
16
16
  int main(void)
17
17
  {
18
18
  static int v[200002];
19
- if (!v) return puts("out of memory");
20
19
  v[0] = 0;
21
20
  int n = 2, q, c, x;
22
21
  scanf("%d%d", &v[1], &q);

2

malloc をやめて、static に変更

2021/09/07 13:22

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -1,7 +1,6 @@
1
1
  C で書いてみました。単純なコードなので、時間制限に引っかかるかもしれません。
2
2
  ```C
3
3
  #include <stdio.h> // scanf, printf
4
- #include <stdlib.h> // malloc, free
5
4
 
6
5
  int search(int v[], int n, int x)
7
6
  {
@@ -16,7 +15,7 @@
16
15
 
17
16
  int main(void)
18
17
  {
19
- int *v = malloc(sizeof(int[200002]));
18
+ static int v[200002];
20
19
  if (!v) return puts("out of memory");
21
20
  v[0] = 0;
22
21
  int n = 2, q, c, x;
@@ -34,7 +33,6 @@
34
33
  printf("%d\n", v[i] - v[i-1]);
35
34
  }
36
35
  }
37
- free(v);
38
36
  }
39
37
  ```
40
38
  これのどこが分からないのかをコメントしてください。

1

コードの修正

2021/09/07 13:20

投稿

kazuma-s
kazuma-s

スコア8222

answer CHANGED
@@ -16,7 +16,7 @@
16
16
 
17
17
  int main(void)
18
18
  {
19
- int *v = malloc(sizeof(int[1000000001]));
19
+ int *v = malloc(sizeof(int[200002]));
20
20
  if (!v) return puts("out of memory");
21
21
  v[0] = 0;
22
22
  int n = 2, q, c, x;