ホームページ > バックエンド開発 > C++ > C++ で範囲合計クエリを実行した後、指定された配列から最初の配列を検索します

C++ で範囲合計クエリを実行した後、指定された配列から最初の配列を検索します

PHPz
リリース: 2023-09-17 17:09:02
転載
2744 人が閲覧しました

在 C++ 中的范围求和查询后从给定数组中查找初始数组

この問題では、サイズ N の配列 res[] を取得します。私たちのタスクは、範囲合計クエリの後に、指定された配列から最初の配列を見つけることです。

[s, e, val] クエリを実行するときに配列 rel[] が返される開始配列を見つける必要があります。

各 [s, e, val] クエリの解は次のとおりです。

s -> 開始インデックス

e -> 終了インデックス

val ->配列内の各要素に追加する値を s から e まで更新します。

#この問題を理解するために例を挙げてみましょう。
Input : rel[] = {7, 4, 8}
Query[][] = {{1, 2, 1},
{0, 1, 3}}
Output : {4, 0, 7}
ログイン後にコピー

説明 の翻訳は次のとおりです。

説明

initialArray = {4, 0, 7}; query = {1, 2, 1}; finalArray = {4, 1, 8}
initialArray = {4, 1, 8}; query = {0, 1, 3}; finalArray = {7, 4, 8}
ログイン後にコピー

解決策

問題を解決する簡単な方法は、すべてのクエリを反復処理し、すべてのクエリの問題を解決したのと同じ方法で解決してから返すことです。最後に見つかった配列。ここで、初期配列を見つけるには、逆の方法でそれを操作する必要があります。つまり、指定された配列からそれを減算します。

ソリューションがどのように機能するかを示すプログラム例

#include <iostream>
using namespace std;
void calcInitialArrayQueries(int arr[], int n, int query[][3], int q) {
   for (int i = 0; i < q; i++) {
      for (int j = query[i][0];j <= query[i][1]; j++) {
         arr[j] = arr[j] - query[i][2];
      }
   }
   for (int i = 0; i < n; i++)
      cout<<arr[i]<<" ";
}
int main() {
   int arr[] = { 5, 1, 8, 2, 9};
   int n = sizeof(arr) / sizeof(arr[0]);
   int query[][3] = { {0, 2, -2}, {1, 4, 3}};
   int q = sizeof(query) / sizeof(query[0]);
   cout<<"Initial array : "; calcInitialArrayQueries(arr, n, query, q);
   return 0;
}
ログイン後にコピー

出力

Initial array : 7 0 7 -1 6
ログイン後にコピー

以上がC++ で範囲合計クエリを実行した後、指定された配列から最初の配列を検索しますの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

ソース:tutorialspoint.com
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート