前提
以下のプログラムにおけるAjとCjをプログラムを作成する過程で見たいと思い出力したところ、自分の予想とは違かったので、どういう処理なのかを知りたいです。
該当のソースコード
C++
1#include <iostream> 2#include <vector> 3#include <algorithm> 4using namespace std; 5 6int main() { 7 // 入力 8 int N; 9 cin >> N; 10 vector<long long> a(N), b(N), c(N); 11 for (int i = 0; i < N; ++i) cin >> a[i]; 12 for (int i = 0; i < N; ++i) cin >> b[i]; 13 for (int i = 0; i < N; ++i) cin >> c[i]; 14 15 // ソートする 16 sort(a.begin(), a.end()); 17 sort(b.begin(), b.end()); 18 sort(c.begin(), c.end()); 19 // b[j] を固定して考える 20 long long res = 0; 21 for (int j = 0; j < N; ++j) { 22 long long Aj = lower_bound(a.begin(), a.end(), b[j]) - a.begin(); 23 cout << "lower_bound=" << *lower_bound(a.begin(), a.end(), b[j]) << endl; 24 cout << "a.begin=" << *a.begin() << endl; 25 cout << "Aj=" << Aj << endl; 26 long long Cj = N - (upper_bound(c.begin(), c.end(), b[j]) - c.begin()); 27 //cout << "N=" << N << endl; 28 //cout << "upper_bound=" << *upper_bound(c.begin(), c.end(), b[j]) << endl; 29 //cout << "Cj=" << Cj << endl; 30 res += Aj * Cj; 31 } 32 cout << res << endl; 33}
入力
3
1 1 1
2 2 2
3 3 3
出力結果
lower_bound=33
a.begin=1
Aj=3
lower_bound=33
a.begin=1
Aj=3
lower_bound=33
a.begin=1
Aj=3
27
プログラム上だと、 long long Aj = lower_bound(a.begin(), a.end(), b[j]) - a.begin();
なので、Aj=33-1=32じゃないのでしょうか。
また、なぜ、ずっと33なのでしょうか...
試したこと
Aj、lower_boundを出力。
補足情報(FW/ツールのバージョンなど)
些細なことでもコメント、ご指摘いただけると助かります...
> ひとつ目の出力は、Aj=3、Cj=56 となる予想でした。
入力データが不明なので、なぜこの予想なのか理解できません。