こちらの問題が累積和の基本問題らしいので取り組んでみまして、以下が解答コードです。
#include <bits/stdc++.h> using namespace std; int memo[1000001] = {0}; int n, ans = 0; int main() { int a, b; cin >> n; for(int i = 0; i < n; ++i){ cin >> a >> b; ++memo[a]; --memo[b + 1]; } ans=memo[0]; for(int i = 1; i <= 1000000; ++i){ memo[i] += memo[i - 1]; ans = max(ans, memo[i]); } cout << ans << endl; return 0; }
######質問内容
最初のfor文でai,bi(1 ≦ i ≦ n)を受け取ったときに、memo[ai]に+1、memo[bi+1]に-1をするのだと思いますが、そうだと仮定して入力例1でやると
0,0,0,0,0,0,0,0,... //ここまでで10^6+1個の0初期化した配列を用意 +1,0,0,-1,0,0,0,0,... +1,0,+1,-1,-1,0,0,0,... +1,0,+1,-1,-1,-1,0,0,... +1,0,+2,-1,-1,0,0,-1,...
となっていると思うのですがこの後何をしてるのかわからないので教えていただけますと幸いです。また僕のこの途中までの考察で間違いがありましたらそれも合わせて教えてください。よろしくお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。