پرنٽ ۽ سرٽيفڪيشن جا حڪم ختم ڪرڻ کانپوءِ تبديل ٿيل آرٽ پرنٽ ڪيو


تڪليف جي سطح وچولو
بار بار پڇڻ ۾ ByteDance Cisco Citrix مفت چارج ھيڪر رِڪن نگررو ناٽڪ ٽراداتا
ڪيريو

توهان کي ڊي جي هڪ طاري ڏني وئي آهي ، شروعاتي طور صف ۾ سڀئي قيمتون 0 هوندي ، ۽ سوال. هر سوال ۾ چار قدر شامل آهن ، سوال جو قسم T ، رينج جي کاٻي پوائنٽ ، هڪ حد جو صحيح نقطو ۽ هڪ نمبر ڪ ، توهان کي هيٺيان عمل ڪرڻو آهي.

جيڪڏهن T = 0 ، ڏنل قطار ۾ قيمت شروع ٿيل (شروع ، آخر) ۾ تمام انٽيگرز کي قدر شامل ڪريو ،

جيڪڏهن T = 1 ، ڏنل ڏنل حد ۾ سڀني شروعاتن کان قدر ڪ (قيمت ، آخر) کي ڪٽ ڪريو.

مثال

arr[]={0, 0, 0, 0, 0}
Query: {(0, 2, 4, 1), (1, 3, 5, 2), (0, 1, 4, 3)}
3 4 2 2 -2

وضاحت

(0 ، 2 ، 4 ، 1) رينج جي اندر رھندڙ سڀني toانچي کي 1 شامل ڪريو جئين ته اھو ھڪڙو قسم آھي 0 سوال.

(1 ، 3 ، 5 ، 2) رينج جي سڀني انٽيگرز کان 2 کي ڪٽايو جئين اهو هڪ قسم جي 1 سوال آهي.

(0 ، 1 ، 4 ، 3) رينج جي اندر رھندڙ سڀني toانچي کي 3 شامل ڪريو جئين ته اھو ھڪڙو قسم آھي 0 سوال.

پرنٽ ۽ سرٽيفڪيشن جا حڪم ختم ڪرڻ کانپوءِ تبديل ٿيل آرٽ پرنٽ ڪيو

 

گهڻن سوالن کان پوءِ ايڊٽمنٽ ٿيل ترميم کي ڇپائڻ لاءِ

  1. شروعاتي ڪريو صف 0 سان.
  2. هر سوال لاءِ ،
  3. جيڪڏھن قسم جو سوال ويليو کي شامل ڪرڻ آھي ، پوءِ قدر ڪ کي -1 جي پوزيشن کي قدر ۾ شامل ڪندي ويليو k شامل ڪندي ۽ صحيح پوزيشن تي ويل ڪ کي ڪٽ ڪريو.
  4. جيڪڏھن قسم جو سوال قدرن کي گھٽائڻ آھي ، پوءِ قدر ڪ کي -1 جي قيمت کي اپڊيٽ ڪيو ويل قدر کي ڪٽ ڪندي ۽ صحيح جاءِ تي ويل ويل کي شامل ڪريو.
  5. صف کي ڇڪڻ ۽ ھر پوئين قيمت کي صف جي موجوده قيمت ۾ شامل ڪريو.
  6. پرنٽ لسٽ.

وضاحت

اسان کي صف ڏني وئي آهي ، شروعات ۾ ، صف ۾ سڀ قيمتون 0. اسان پڻ هڪ مهيا ڪيو ويو آهي q سوالن جو تعداد ، سوال ٻن قسمن جو هوندو ، هر پڇاڻ تي مشتمل هوندي آهي ، ان جو قسم ، رينج ، ۽ ڪي نمبر. جيڪڏهن سوال جو قسم 0 آهي ، اسان قيمت سڀني ڪثرت سان شامل ڪنداسين جيڪا حد ۾ اچي ٿي. جيڪڏهن اسان کي 1 جي طور تي پڇا ڳاڇا ڏني وئي آهي ، اسان حد جي اندر سڀني عددن جي قيمت ڪ کي ڪٽ ڪنداسين. سڀ سوالن جي عمل ڪرڻ کان پوءِ ، اسان ان نتيجن جي صف جي ڇپائي ڪنداسين.

آپريشن ڪرڻ لاءِ. پهرين اسان کي اهو جانچڻ جي ضرورت آهي ته ڪهڙي قسم جو سوال اسان کي ڏنو ويو آهي. جيڪڏهن سوال پهرين قسم جو آهي ته پوءِ اسان صف ۾ صف جي شروعاتي نقطي تي قيمت ڪ. انهي سان گڏ ، صف جي حد جي آخري نقطي کان قدر ڪ کي ڪٽايو.

اسان اڳ ذڪر ڪيل ٽيڪنالاجي جي سامهون ڪنداسين. جيڪڏهن اسان کي 1 قسم جي سوال کي استعمال ڪرڻ لاءِ ڏنو ويو آهي جنهن ۾ اسان کي حد اندر انٽيگر صف جي سڀني قدرن کي گهٽائڻو آهي. ان کان پوء اسان صف جي شروعاتي رينج جي قيمت ڪ قدر کي رد ڪنداسين. ان کان پوءِ ، رينج جي آخري پوائنٽ انڊيڪس تي قدر ڪ شامل ڪريو.

ڏنل سوالن جي هر هڪ لاءِ. اسان کي مٿي ٻڌايل ٽيڪنڪ کي انجام ڏيڻو آهي. ان کان پوءِ اسان صف ٺاهي رهيا آهيون ، جنهن ۾ اسان صف جي موجوده قدر ۾ پوئين قدر شامل ڪنداسين. ۽ رقم کي موجوده ويليو کي ذخيرو ڪريو. يا اسان اهو چئي سگھون ٿا ته اسان صف جي موجوده قيمت کي تازه ڪاري ڪريون ٿا. صف کي تعمير ڪرڻ کان پوءِ ، اسان صف ڇپائي سگهنداسين. اھو ھڪڙو سڌريل صف جو گھربل نتيجو ٿيندو.

ڪوڊ

واڌو ۽ رد ڪرڻ جا حڪم جاري ڪرڻ کانپوءِ سي ++ ڪوڊ تبديل ٿيل صف کي پرنٽ ڪرڻ لاءِ

#include<iostream>
#include<stdio.h>
#include<string.h>

using namespace std;

void solveQuery(int arr[], int n, int T, int left, int right, int k)
{
    if (T == 0)
    {
        arr[left -1] += k;
        arr[right] += -k;
    }
    else
    {
        arr[left -1] += -k;
        arr[right] += k;
    }
    return;
}

void build(int arr[], int n)
{
    for (int i = 1; i < n; ++i)
        arr[i] += arr[i-1];

    return;
}

int main()
{
    int n = 5;
    int arr[n+1];

    memset(arr, 0, sizeof(arr));


    //query, left, right, k(value which is to add or subtract.
    solveQuery(arr, n, 0, 2, 4, 1);

    //query, left, right, k(value which is to add or subtract.
    solveQuery(arr, n, 1, 3, 5, 2);

    //query, left, right, k(value which is to add or subtract.
    solveQuery(arr, n, 0, 1, 4, 3);

    build(arr, n);

    for (int i = 0; i < n; ++i)
        cout << arr[i] << " ";
    return 0;
}
3 4 2 2 -2

جاوا ڪوڊ شامل ڪرڻ کان پوءِ ترميم ڪندڙ صف کي پرنٽ ڪرڻ کان پوءِ واڌ ۽ رد ڪرڻ جا حڪم جاري ڪرڻ کان

import java.util.Arrays;

class AdditionSubtractionQuery
{
    static void solveQuery(int arr[], int n, int T, int left, int right, int k)
    {
        if (T == 0)
        {
            arr[left -1] += k;
            arr[right] += -k;
        }
        else
        {
            arr[left -1] += -k;
            arr[right] += k;
        }
        return;
    }
    
    static void build(int arr[], int n)
    {
        for (int i = 1; i < n; ++i)
            arr[i] += arr[i-1];
    }
    
    public static void main(String arg[])
    {
        int n = 5;
        int arr[] = new int[n+1];
        Arrays.fill(arr, 0);

        //query, left, right, k(value which is to add or subtract.
        solveQuery(arr, n, 0, 2, 4, 1);

        //query, left, right, k(value which is to add or subtract.
        solveQuery(arr, n, 1, 3, 5, 2);

        //query, left, right, k(value which is to add or subtract.
        solveQuery(arr, n, 0, 1, 4, 3);

        build(arr, n);

        for (int i = 0; i < n; ++i)
            System.out.print(arr[i]+" ");
    }
}
3 4 2 2 -2

پيچيدگي تجزيي

وقت جي پيچيدگي

اي (ق + ن) جتي "ق" سوالن جو تعداد آهي ، ۽ “ن” صف ۾ موجود عنصرن جو تعداد آهي. ڇو ته پهرين اسان ق سوالن کي انجام ڏيون ٿا جيڪي او (1) وقت وٺن ٿا ۽ پوءِ صف کي جوڙڻ وقت اي (اين) وقت جي ضرورت آهي.

خلائي پيچيدگي

اي (ن) جتي “ن” صف ۾ موجود عنصرن جو تعداد آهي. جتان اسان آپريشن کي انجام ڏيڻ جي لاءِ سرچ بڻايو آهي. خلائي پيچيدگي لڪير آھي.