#include<iostream>
#include<cstdio>
#include<cstdlib>//wym's second xianduanshu
#define maxn 7000000
#define ls (num<<1)
#define rs (num<<1|1)
using namespace std;
int a[maxn],tree[maxn],size[maxn],lazy[maxn];
void build (int num,int l,int r)
{
size[num]=r-l+1;
if (l==r)
{
tree[num]=a[l];
return ;
}
int mid=(l+r)>>1;
build (ls,l,mid);
build (rs,mid+1,r);
tree[num]=tree[ls]+tree[rs];
}
void down (int num)
{
tree[ls]+=lazy[num]*size[ls];
tree[rs]+=lazy[num]*size[rs];
lazy[ls]+=lazy[num],lazy[rs]+=lazy[num];
lazy[num]=0;
}
void update(int num,int l,int r,int x,int y,int z)
{
if (l!=r) down(num);
if (l==x&&r==y)
{
tree[num]+=z*size[num];
lazy[num]+=z;
return ;
}
int mid=(l+r)>>1;
if (y<=mid) update(ls,l,mid,x,y,z);
else if (x>mid) update(rs,mid+1,r,x,y,z);
else update(ls,l,mid,x,mid,z),update(rs,mid+1,r,mid+1,y,z);
tree[num]=tree[ls]+tree[rs];
}
int query(int num,int l,int r,int x,int y)
{
if (l!=r) down(num);
if (x<=l&&r<=y) return tree[num];
int mid=(l+r)>>1;
if (y<=mid) return query(ls,l,mid,x,y);
else if (x>mid) return query(rs,mid+1,r,x,y);
else return query(ls,l,mid,x,mid)+query(rs,mid+1,r,mid+1,y);
}
/*int query(int num,int l,int r,int x,int y)
{
if (l!=r) down(num);
if (x==l) return tree[num];
int mid=(l+r)>>1,res=0;
if (x<=mid) res+=query(ls,l,mid,x,y);
if (y>mid) res+=query(rs,mid+1,r,x,y);
return res;
}*/
int main()
{
int n,m;
scanf ("%d",&n);
for (int i=1;i<=n;++i)
scanf ("%d",&a[i]);
build (1,1,n);
scanf ("%d",&m);
for (int i=1;i<=m;++i)
{
int b,x,y,z;
scanf ("%d",&b);
if (b==1)
{
scanf ("%d%d%d",&x,&y,&z);
update(1,1,n,x,y,z);
}
else
{
scanf ("%d",&x);
printf("%d\n",query(1,1,n,x,x));
}
}
return 0;
}
哈哈哈哈哈哈哈哈又是半个小时死于一些奇怪的东西
我什么人品啊哈哈哈哈哈哈哈哈哈哈哈(眼泪掉下来)
真的 以后再也不能输入x处理i了(痛苦的笑容)
生命真是充满阳光啊qwq
297

被折叠的 条评论
为什么被折叠?



