Պրեֆիքս գումարները (Prefix sum) շատ օգտակար են, երբ աշխատում ենք զանգվածներում գտնվող միջակայքերի հետ: Շատ դեպքերում կարելի է խուսափել նույն գումարները մի քանի անգամ հաշվելուց, եթե նախապես պատրաստենք զանգվածի prefix (պրեֆիքս) գումարները և օգտվենք դրանցից:
Պատկերացրեք խնդիր, որտեղ անհրաժեշտ է հաճախ (օրինակ միլիոնավոր անգամներ) պատասխանել հարցին. «Ո՞րն է a զանգվածի էլեմենտների գումարը սկզբից մինչև qi ինդեքսը»։ Եթե յուրաքանչյուր հարցման համար ամեն անգամ գումարենք a[0] + a[1] + a[2] + ... + a[qi], ապա շաա՜տ շատ դանդաղ կլինի:
Նկատեք, որ ուշադիր նայելով այդ հաշվարկներին կարելի է գլխի ընկնել, որ շատ հաշվարկներ կրկնվում են և կարլի է դրանց արդյունքները պահել և օգտագործել հաջորդ հաշվարկների մեջ։ Օրինակ, res2 հաշվելուց առաջ մենք արդեն գիտենք res1-ը, իսկ res4 հաշվելուց առաջ ունենք a[0] + a[1] + a[2] + a[3] + a[4] + a[5]-ի արդյունքը res2-ի մեջ: Այս ամենը կարելի է շատ ավելի արագ անել, եթե նախօրոք հաշված լինենք prefix (պրեֆիքս) գումարների զանգվածը:
Դրա համար կարող ենք ստեղծել մի նոր զանգված p անունով, որտեղ p[i]-ն կպահի a[0] + a[1] + ... + a[i] գումարը: Այդ դեպքում qi հարցման պատասխանը պարզապես կլինի p[qi]-ն:
Այսպիսով, կարելի է բոլոր prefix (պրեֆիքս) գումարները հաշվել գծային ժամանակում (O(n))for ցիկլով, և ստանալ p զանգվածը, որը հետո կարող ենք օգտագործել ամեն հարցմանն ակնթարթորեն պատասխանելու համար: Այսպիսով յուրաքանչյուր qi հարցման համար պատասխանն ուղղակի կլինի p[qi]-ն:
Մուտքի առաջին տողում տրված է մեկ ամբողջ թիվ n (1 ≤ n ≤ 105). Մուտքի երկրորդ տողում տրված են բացատով առանձնացված n ամբողջ թվեր, որոնք ներկայացնում են a զանգվածի արժեքները (−109<ai<109):
Ելք
Ծրագիրը պետք է արտածի a զանգվածի պրեֆիքս գումարների զանգվածը: