P3374 "template" tree Array 1 title description
Title, you need to perform the following two operations, known as a sequence:
1. Add a number to the X
2. Find out the amount of each number in a range and
Input output Format input format:
The first line contains two integers n, M, respectively, indicating the number of numbers and the total number of operations.
The second line contains n space-delimited integers, where the I number represents the initial value of item I of a sequence.
The next M line contains 3 or 4 integers, representing an operation, as follows:
Action 1: Format: 1 x k Meaning: Add x number plus K
Action 2: Format: 2 x y meaning: the and of each number in the output interval [x, y]
Output format:
The output contains several line integers, which is the result of all Operation 2.
Input and Output Sample input example # #:
5 51 5 4 2 31 1 32 2 51 3-11 4 22 1 4
Sample # # of output:
1416
Description
Time limit: 1000ms,128m
Data size:
For 30% data: n<=8,m<=10
For 70% data: n<=10000,m<=10000
For 100% data: n<=500000,m<=500000
Sample Description:
Therefore, the output results 14, 16
#include <iostream>#include<cstdio>using namespacestd;Const intn=500010;//1 x k meaning: The number of x plus K//2 x y meaning: the and of each number in the output interval [x, y]intA[n];intT[n];intN,q,x,y,how,k;inlineintRead () {intx=0;CharC=getchar ();intf=1; while(c<'0'|| C>'9'){if(c=='-') f=-1; c=GetChar ();} while(c>='0'&&c<='9') x=x*Ten+c-'0', c=GetChar (); returnx*F;}intLowbit (intx) { return(x&-x); }intAddintXinty) { for(; x<=n;x+=lowbit (x)) T[X]+=y;}intSumintx) { intans=0; for(;x>0; x-=lowbit (x)) Ans+=T[x]; returnans;}intMain () {n=read (); Q=read (); for(intI=1; i<=n;i++) {A[i]=read (); Add (I,a[i]); } for(; Q; q--) { how=read (); if(how==1) {x=read (); Y=read (); Add (x, y); } Else if(how==2) {x=read (); Y=read (); printf ("%d\n", sum (y)-sum (X-1)); } } return 0;}
P3374 "template" Tree array 1