#include <cstdio>
#include <cstring>
int c[MAX];///保存树状数组
int s[MAX];///原始数据前i项和,用于初始化c[]数组时使用
int n;///数组长度
int lowbit(int k)
{
return k&(k^(k-1));
}
void make_ary()///初始化c[]
{
for(int i=1; i<=n; i++)
{
s[i]=s[i-1]+d[i];
c[i]=s[i]-s[i-lowbit(i)];
}
}
void up_ary(int pos,int v)///更新数组d中pos位置,更新差值为v
{
while(pos<=n)
{
c[pos]+=v;
pos+=lowbit(pos);
}
}
int sum_ary(int pos)///求前pos项数据的和
{
int sum=0;
while(pos>0)
{
sum+=c[pos];
pos-=lowbit(pos);
}
return sum;
}
int main()
{
while(scanf("%d",&n)==1&&n!=0){
for(int i=1;i<=n;i++)
scanf("%d",&d[i]);
memset(s,0,sizeof(s));
memset(c,0,sizeof(c));
make_ary();
int p,q;
scanf("%d%d",&p,&q);
printf("%d\n",sum_ary(q)-sum_ary(p-1));
int pos,v;
scanf("%d%d",&pos,&v);
up_ary(pos,v-d[pos]);///注意更新的值
for(int i=1;i<=n;i++)
printf("%d ",c[i]);
printf("\n");
printf("%d\n",sum_ary(q)-sum_ary(p-1));///注意
}
}
#include <cstring>
#define MAX 1010
int c[MAX];///保存树状数组
int s[MAX];///原始数据前i项和,用于初始化c[]数组时使用
int n;///数组长度
int lowbit(int k)
{
return k&(k^(k-1));
}
void make_ary()///初始化c[]
{
for(int i=1; i<=n; i++)
{
s[i]=s[i-1]+d[i];
c[i]=s[i]-s[i-lowbit(i)];
}
}
void up_ary(int pos,int v)///更新数组d中pos位置,更新差值为v
{
while(pos<=n)
{
c[pos]+=v;
pos+=lowbit(pos);
}
}
int sum_ary(int pos)///求前pos项数据的和
{
int sum=0;
while(pos>0)
{
sum+=c[pos];
pos-=lowbit(pos);
}
return sum;
}
int main()
{
while(scanf("%d",&n)==1&&n!=0){
for(int i=1;i<=n;i++)
scanf("%d",&d[i]);
memset(s,0,sizeof(s));
memset(c,0,sizeof(c));
make_ary();
int p,q;
scanf("%d%d",&p,&q);
printf("%d\n",sum_ary(q)-sum_ary(p-1));
int pos,v;
scanf("%d%d",&pos,&v);
up_ary(pos,v-d[pos]);///注意更新的值
for(int i=1;i<=n;i++)
printf("%d ",c[i]);
printf("\n");
printf("%d\n",sum_ary(q)-sum_ary(p-1));///注意
}
}