質問編集履歴

1

不適切すぎる質問の仕方を直しました。

2022/11/26 08:23

投稿

SmaSTATION
SmaSTATION

スコア29

test CHANGED
@@ -1 +1 @@
1
- lower_boundとupper_boundの処理を知りたい
1
+ lower_boundとupper_boundの処理を知りたい
test CHANGED
@@ -22,55 +22,46 @@
22
22
  sort(a.begin(), a.end());
23
23
  sort(b.begin(), b.end());
24
24
  sort(c.begin(), c.end());
25
-
26
-
27
-
28
-
29
25
  // b[j] を固定して考える
30
26
  long long res = 0;
31
27
  for (int j = 0; j < N; ++j) {
32
28
  long long Aj = lower_bound(a.begin(), a.end(), b[j]) - a.begin();
29
+ cout << "lower_bound=" << *lower_bound(a.begin(), a.end(), b[j]) << endl;
30
+ cout << "a.begin=" << *a.begin() << endl;
33
- std::cout << Aj << std::endl;
31
+ cout << "Aj=" << Aj << endl;
34
32
  long long Cj = N - (upper_bound(c.begin(), c.end(), b[j]) - c.begin());
35
- std::cout << Cj << std::endl;
36
- cout<<"------------"<<endl;
33
+ //cout << "N=" << N << endl;
34
+ //cout << "upper_bound=" << *upper_bound(c.begin(), c.end(), b[j]) << endl;
35
+ //cout << "Cj=" << Cj << endl;
37
36
  res += Aj * Cj;
38
-
39
37
  }
40
38
  cout << res << endl;
41
39
  }
42
40
  ```
41
+ ### 入力
42
+ 3
43
+ 1 1 1
44
+ 2 2 2
45
+ 3 3 3
46
+
43
47
 
44
48
  ### 出力結果
45
- ```ここに言語を入力
46
- 2
47
- 5
48
- ------------
49
+ lower_bound=33
50
+ a.begin=1
49
- 3
51
+ Aj=3
50
- 5
51
- ------------
52
+ lower_bound=33
53
+ a.begin=1
52
- 5
54
+ Aj=3
53
- 4
54
- ------------
55
+ lower_bound=33
55
- 5
56
- 3
57
- ------------
56
+ a.begin=1
58
- 5
59
- 3
57
+ Aj=3
60
- ------------
61
- 6
62
- 2
63
- ------------
64
- 87
58
+ 27
65
- ```
66
- 自分の調べた上での予想だとソートしたうえで、keyとなるデータ(今回はソートしたbの配列のj番目)をAとCに挿入したとき、
67
- lower_boundは左側、upper_boundは右側という解釈なので、
68
- ひとつ目の出力は、Aj=3、Cj=56 となる予想でした。
69
59
 
60
+ プログラム上だと、``` long long Aj = lower_bound(a.begin(), a.end(), b[j]) - a.begin();```
61
+ なので、Aj=33-1=32じゃないのでしょうか。
62
+ また、なぜ、ずっと33なのでしょうか...
70
63
  ### 試したこと
71
-
72
- バラバラに出力。
64
+ Aj、lower_boundを出力。
73
- resを除外。
74
65
 
75
66
  ### 補足情報(FW/ツールのバージョンなど)
76
67