#include"iostream"
using namespace std;
const int maxinterval=100;
int upper,tree[maxinterval+1];
void init()
{
upper=0;memset(tree,0,sizeof(tree));
}
void update(int r,int x) //sum[1...r]+=x;
{
while(r<=upper){
tree[r]+=x;r+=(r&(r^(r-1)));
}
}
int sum(int r) //return sum[1...r]
{
int res=0;
while(r>0){
res+=tree[r];r-=(r&(r^(r-1)));
}
return res;
}
int main()
{
cout<<"init:"<<endl;
init();
for(int i=1;i<=maxinterval;i++)
cout<<tree[i]<<" ";
cout<<endl;
upper=100;
cout<<sum(8)<<endl;
update(8,5);
cout<<sum(8)<<endl;
for(int i=1;i<=maxinterval;i++)
cout<<tree[i]<<" ";
cout<<endl;
return 0;
}
#include <cstdio> //hdu 1166 地兵布阵
#define lson l , m , rt << 1
#define rson m + 1 , r , rt << 1 | 1
const int maxn = 55555;
int sum[maxn << 2];
void PushUP(int rt) {
sum[rt] = sum[rt << 1] + sum[rt << 1 | 1];
}
void build(int l, int r, int rt) {
if (l == r) {
scanf("%d", &sum[rt]);
return ;
}
int m = (l + r) >> 1;
build(lson);
build(rson);
PushUP(rt);
}
void update(int p, int add, int l, int r, int rt) {
if (l == r) {
sum[rt] += add;
return ;
}
int m = (l + r) >> 1;
if (p <= m) update(p , add , lson);
else update(p , add , rson);
PushUP(rt);
}
int query(int L, int R, int l, int r, int rt) {
if (L <= l && r <= R) {
return sum[rt];
}
int m = (l + r) >> 1;
int ret = 0;
if (L <= m) ret += query(L , R , lson);
if (R > m) ret += query(L , R , rson);
return ret;
}
int main() {
int T , n;
scanf("%d", &T);
for (int cas = 1 ; cas <= T ; cas ++) {
printf("Case %d:\n", cas);
scanf("%d", &n);
build(1 , n , 1);
char op[10];
while (scanf("%s", op)) {
if (op[0] == 'E') break;
int a , b;
scanf("%d%d", &a, &b);
if (op[0] == 'Q') printf("%d\n", query(a , b , 1 , n , 1));
else if (op[0] == 'S') update(a , -b , 1 , n , 1);
else update(a , b , 1 , n , 1);
}
}
return 0;
}
#include"iostream" //POJ3246
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,n,1
#define mid ((l+r)>>1)
#define ll long long
#define cl(a) memset(a,0,sizeof(a));
using namespace std;
const int maxn=50000*4;
int Max[maxn],Min[maxn],num[maxn];
void pushup(int rt)
{
Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
Min[rt]=min(Min[rt<<1],Min[rt<<1|1]);
}
void build(int l,int r,int rt)
{
if(l==r)
{
scanf("%d",&num[rt]);
Max[rt]=Min[rt]=num[rt];
return ;
}
build(lson);
build(rson);
pushup(rt);
}
int Maxx=-9999;
int Minn=99999999;
void query(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R)
{
Maxx=max(Maxx,Max[rt]);
Minn=min(Minn,Min[rt]);
return;
}
if(L<=mid) query(L,R,lson);
if(R>mid) query(L,R,rson);
}
int main()
{
#ifdef OJ
freopen("a.txt","r",stdin);
#endif // DEBUG
int n,q;
while(scanf("%d%d",&n,&q)!=EOF)
{
build(1,n,1);
for(int i=0;i<q;i++)
{
int a,b;
Maxx=-9999;
Minn=99999999;
scanf("%d%d",&a,&b);
query(a,b,1,n,1);
printf("%d\n",Maxx-Minn);
}
}
return 0;
}
#include"iostream" //HDU 1754
#include"stdio.h"
#include"algorithm"
#define lson l,mid,rt<<1
#define rson mid+1,r,rt<<1|1
#define root 1,n,1
#define mid ((l+r)>>1)
#define ll long long
#define cl(a) memset(a,0,sizeof(a));
using namespace std;
const int maxn=200000*4;
int num[maxn];
int Max[maxn];
void pushup(int rt)
{
Max[rt]=max(Max[rt<<1],Max[rt<<1|1]);
}
void update(int p,int add,int l,int r,int rt)
{
if(l==r) {
Max[rt]=add;
return;
}
if(p<=mid) update(p,add,lson);
else update(p,add,rson);
pushup(rt);
}
void build(int l,int r,int rt)
{
if(l==r)
{
scanf("%d",&Max[rt]);
return ;
}
build(lson);
build(rson);
pushup(rt);
}
int Maxx=-999999;
int query(int L,int R,int l,int r,int rt)
{
if(L<=l&&r<=R) return Max[rt];
if(L<=mid) Maxx=max(Maxx,query(L,R,lson));
if(R>mid) Maxx=max(Maxx,query(L,R,rson));
return Maxx;
}
int main()
{
#ifdef DEBUG
freopen("a.txt","r",stdin);
#endif // DEBUG
int n,q;
while(scanf("%d%d",&n,&q)!=EOF)
{
build(root);
for(int i=0;i<q;i++)
{
int a,b;
char op[10];
scanf("%s",op);
if(op[0]=='Q')
{
int a,b;
scanf("%d%d",&a,&b);
Maxx=-999999;
printf("%d\n",query(a,b,root));
}
else
{
int p,add;
scanf("%d%d",&p,&add);
update(p,add,root);
}
}
}
return 0;
}