C++での範囲追加II
Mと呼ばれる1つのm*n行列があり、これはすべて0で初期化され、いくつかの更新操作もあるとします。ここで、演算は2D配列で表され、各演算は2つの正の整数xとyを持つ配列で表されます。つまり、0からaまでの範囲のすべての値iに対してM[i][j]を1つ加算する必要があります。 1および0からb-1の範囲のすべての値j。すべての操作を実行した後、行列内の最大整数の数のカウントを見つける必要があります。
したがって、入力がm =3、n =3、操作=[[2,2]、[3,3]]のような場合、出力は4になります
最初のマトリックスは次のようなものです
0 | 0 | 0 |
0 | 0 | 0 |
0 | 0 | 0 |
[2,2]を実行すると、次のようになります
1 | 1 | 0 |
1 | 1 | 0 |
0 | 0 | 0 |
[2,2]を実行すると、次のようになります
2 | 2 | 1 |
2 | 2 | 1 |
1 | 1 | 1 |
これを解決するには、次の手順に従います-
-
minR:=m、minC:=n
-
ops配列内のopの場合
-
minR:=minRとop[0]
の最小値 -
minC:=minCとop[1]
の最小値
-
-
minR * minC
を返します
例
理解を深めるために、次の実装を見てみましょう-
#include <bits/stdc++.h> using namespace std; class Solution { public: int maxCount(int m, int n, const vector<vector<int>>& ops) { int minR = m; int minC = n; for (const auto& op : ops){ minR = min(minR, op[0]); minC = min(minC, op[1]); } return minR * minC; } }; main(){ Solution ob; vector<vector<int>> v = {{2,2},{3,3}}; cout << (ob.maxCount(3,3,v)); }
入力
3,3,{{2,2},{3,3}}
出力
4
-
C++の範囲のセットビットをコピーします
このチュートリアルでは、指定された範囲内のある数値のセットビットを別の数値にコピーするプログラムについて説明します。 このために、2つの整数が提供されます。私たちのタスクは、最初の数値のビットを確認し、それらが指定された範囲内にある場合は、それらのビットを2番目の数値にも設定することです。最後に、生成された数字を返します。 例 #include <bits/stdc++.h> using namespace std; //copying set bits from y to x void copySetBits(unsigned &x, unsigned y, unsig
-
範囲合計クエリ-C++の不変
整数の配列があるとします。インデックスiからjまでの要素の合計を見つける必要があります。配列は不変であるため、要素は変更されず、そのようなクエリが複数存在することに注意する必要があります。そのため、多数のクエリの実行時間を気にする必要があります。配列がA=[5、8、3、6、1、2、5]のようであるとすると、クエリが(A、0、3)の場合、5 + 8 + 3 + 6=22になります。 これを解決するには、次の手順に従います- 1つの配列Bを取得します。B[i]は0からiまでの要素の合計を格納します クエリの場合は、B [j] – B [i – 1]を実行します 理解を深めるために、次の実装