கூட்டல் மற்றும் கழித்தல் கட்டளைகளை இயக்கிய பின் மாற்றியமைக்கப்பட்ட வரிசையை அச்சிடுக  


சிரமம் நிலை நடுத்தர
அடிக்கடி கேட்கப்படுகிறது ByteDance சிஸ்கோ Citrix ஃப்ரீசார்ஜ் ஹேக்கர் தரவரிசை நாகரோ வேலை டெரடாட்டா
அணி

உங்களுக்கு அளவு n இன் வரிசை வழங்கப்பட்டுள்ளது, ஆரம்பத்தில் வரிசையில் உள்ள அனைத்து மதிப்புகளும் 0 ஆக இருக்கும், மற்றும் வினவல்கள். ஒவ்வொரு வினவலிலும் நான்கு மதிப்புகள் உள்ளன, வினவலின் வகை, வரம்பின் இடது புள்ளி, ஒரு வரம்பின் சரியான புள்ளி மற்றும் ஒரு எண் k, நீங்கள் பின்வரும் செயல்பாடுகளைச் செய்ய வேண்டும்.

T = 0 எனில், கொடுக்கப்பட்ட வரிசையில் கொடுக்கப்பட்ட வரம்பிற்குள் (தொடக்க, முடிவு) உள்ள அனைத்து முழு எண்களுக்கும் k மதிப்பைச் சேர்க்கவும்,

T = 1 எனில், கொடுக்கப்பட்ட வரிசையில் கொடுக்கப்பட்ட வரம்பிற்குள் (தொடக்க, முடிவு) உள்ள அனைத்து முழு எண்களிலிருந்தும் k மதிப்பைக் கழிக்கவும்,

உதாரணமாக  

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) இது ஒரு வகை 1 வினவல் என்பதால் வரம்பிற்குள் உள்ள அனைத்து முழு எண்களுக்கும் 0 ஐச் சேர்க்கவும்.

(1, 3, 5, 2) இது ஒரு வகை 2 வினவல் என்பதால் வரம்பிற்குள் உள்ள அனைத்து முழு எண்களிலிருந்தும் 1 ஐக் கழிக்கவும்.

(0, 1, 4, 3) இது ஒரு வகை 3 வினவல் என்பதால் வரம்பிற்குள் உள்ள அனைத்து முழு எண்களுக்கும் 0 ஐச் சேர்க்கவும்.

கூட்டல் மற்றும் கழித்தல் கட்டளைகளை இயக்கிய பின் மாற்றியமைக்கப்பட்ட வரிசையை அச்சிடுகமுள்  

 

பல கேள்விகளுக்குப் பிறகு மாற்றியமைக்கப்பட்ட வரிசையை அச்சிடுவதற்கான வழிமுறை  

  1. துவக்க வரிசை 0 உடன்.
  2. ஒவ்வொரு வினவலுக்கும்,
  3. வகை வினவல் மதிப்புகளைச் சேர்ப்பதாக இருந்தால், மதிப்பை k ஐச் சேர்ப்பதன் மூலம் இடது -1 நிலையில் மதிப்பைப் புதுப்பிக்கவும், சரியான நிலையில் k மதிப்பைக் கழிக்கவும்.
  4. வகை வினவல் மதிப்புகளைக் கழிப்பதாக இருந்தால், மதிப்பை k ஐக் கழிப்பதன் மூலம் இடது -1 நிலையில் மதிப்பைப் புதுப்பிக்கவும், சரியான நிலையில் k மதிப்பைச் சேர்க்கவும்.
  5. வரிசைக்குச் சென்று ஒவ்வொரு முந்தைய மதிப்பையும் வரிசையின் தற்போதைய மதிப்பில் சேர்க்கவும்.
  6. இறுதி வரிசையை அச்சிடுக.
மேலும் காண்க
ஃபைபோனச்சி எண்களை தலைகீழ் வரிசையில் அச்சிடுங்கள்

விளக்கம்

எங்களுக்கு ஒரு வரிசை வழங்கப்படுகிறது, ஆரம்பத்தில், வரிசையில் உள்ள அனைத்து மதிப்புகளும் 0 ஆகும். எங்களுக்கும் a வழங்கப்படுகிறது q வினவல்களின் எண்ணிக்கை, வினவல் இரண்டு வகைகளாக இருக்கும், ஒவ்வொரு வினவலும் அதன் வகை, வரம்பு மற்றும் ஒரு எண் k ஆகியவற்றைக் கொண்டுள்ளது. வினவலின் வகை 0 எனில், வரம்பிற்குள் வரும் அனைத்து முழு எண்களுக்கும் k மதிப்பைச் சேர்ப்போம். வினவல் வகையை 1 எனக் கொடுத்தால், k இன் மதிப்பை அனைத்து முழு எண்களிலிருந்தும், வரம்பிற்குள் கழிப்போம். எல்லா வினவல்களையும் இயக்கிய பிறகு, அதன் விளைவாக வரும் வரிசையை அச்சிடுவோம்.

இந்த செயல்பாடுகளைச் செய்வதற்கு. முதலில் நமக்கு எந்த வகையான வினவல் வழங்கப்படுகிறது என்பதை சரிபார்க்க வேண்டும். வினவல் முதல் வகையாக இருந்தால், வரிசையில் உள்ள வரம்பின் தொடக்க புள்ளியில் k மதிப்பைச் சேர்ப்போம். மேலும், வரிசையின் வரம்பின் இறுதி புள்ளியிலிருந்து k மதிப்பைக் கழிக்கவும்.

முன்னர் குறிப்பிட்ட நுட்பத்திற்கு நேர்மாறாக நாங்கள் செய்வோம். வகை 1 வினவலைப் பயன்படுத்த எங்களுக்கு வழங்கப்பட்டால், முழு எண் வரிசையின் அனைத்து மதிப்புகளையும் வரம்பிற்குள் கழிக்க வேண்டும். ஒரு வரிசையின் தொடக்க வரம்பு மதிப்பிலிருந்து k மதிப்பைக் கழிப்போம். அதன் பிறகு, வரம்பின் இறுதிப் புள்ளியில் k மதிப்பைச் சேர்க்கவும்.

கொடுக்கப்பட்ட ஒவ்வொரு கேள்விகளுக்கும். நாம் குறிப்பிட்ட நுட்பத்தை செய்ய வேண்டும். பின்னர் நாம் ஒரு வரிசையை உருவாக்குவோம், அதில் முந்தைய மதிப்பை வரிசையின் தற்போதைய மதிப்பில் சேர்ப்போம். தற்போதைய மதிப்புக்கு தொகையை சேமிக்கவும். அல்லது வரிசையின் தற்போதைய மதிப்பை நாங்கள் புதுப்பிக்கிறோம் என்று சொல்லலாம். ஒரு வரிசையை உருவாக்கிய பிறகு, நாங்கள் வரிசையை அச்சிடுவோம். மாற்றியமைக்கப்பட்ட வரிசையின் விரும்பிய முடிவாக இது இருக்கும்.

மேலும் காண்க
நண்பர்கள் இணைத்தல் சிக்கல்

குறியீடு  

கூட்டல் மற்றும் கழித்தல் கட்டளைகளை இயக்கிய பின் மாற்றியமைக்கப்பட்ட வரிசையை அச்சிட சி ++ குறியீடு

#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

சிக்கலான பகுப்பாய்வு  

நேர சிக்கலானது

O (q + n) எங்கே "கே" வினவல்களின் எண்ணிக்கை, மற்றும் “N” என்பது வரிசையில் உள்ள உறுப்புகளின் எண்ணிக்கை. ஏனெனில் முதலில் நாம் Q வினவல்களைச் செய்கிறோம், அவை O (1) நேரம் எடுக்கும், பின்னர் வரிசையை உருவாக்க O (N) நேரம் தேவைப்படுகிறது.

மேலும் காண்க
ஒரு சரத்தில் உள்ளமைக்கப்பட்ட அடைப்புக்குறியின் அதிகபட்ச ஆழத்தைக் கண்டறியவும்

விண்வெளி சிக்கலானது

ஓ (n) எங்கே “N” என்பது வரிசையில் உள்ள உறுப்புகளின் எண்ணிக்கை. செயல்பாடுகளைச் செய்ய நாங்கள் ஒரு வரிசையை உருவாக்கியுள்ளோம். விண்வெளி சிக்கலானது நேரியல்.