C ++
 Computer >> コンピューター >  >> プログラミング >> C ++

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

  1. C++の範囲のセットビットをコピーします

    このチュートリアルでは、指定された範囲内のある数値のセットビットを別の数値にコピーするプログラムについて説明します。 このために、2つの整数が提供されます。私たちのタスクは、最初の数値のビットを確認し、それらが指定された範囲内にある場合は、それらのビットを2番目の数値にも設定することです。最後に、生成された数字を返します。 例 #include <bits/stdc++.h> using namespace std; //copying set bits from y to x void copySetBits(unsigned &x, unsigned y, unsig

  2. 範囲合計クエリ-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]を実行します 理解を深めるために、次の実装