無聊的yyb總喜歡搞出一些正常人無法搞出的東西。有一天,無聊的yyb想出了一道無聊的題:無聊的數列。。。(k峰:這題不是傻x題嗎)
維護乙個數列,支援兩種操作:
1、1 l r k d:給出乙個長度等於r-l+1的等差數列,首項為k,公差為d,並將它對應加到a[l]~a[r]的每乙個數上。即:令a[l]=a[l]+k,a[l+1]=a[l+1]+k+d,
a[l+2]=a[l+2]+k+2d……a[r]=a[r]+k+(r-l)d。
2、2 p:詢問序列的第p個數的值a[p]。
輸入格式:
第一行兩個整數數n,m,表示數列長度和操作個數。
第二行n個整數,第i個數表示a[i](i=1,2,3…,n)。
接下來的m行,表示m個操作,有兩種形式:
1 l r k d
2 p 字母意義見描述(l≤r)。
輸出格式:
對於每個詢問,輸出答案,每個答案佔一行。
線段樹維護差分陣列即可
單點查詢就是區間求和
沒有判斷 r!=n wa了
#includeusingview codenamespace
std;
//input by bxd
#define rep(i,a,b) for(int i=(a);i<=(b);i++)
#define repp(i,a,b) for(int i=(a);i>=(b);--i)
#define ri(n) scanf("%d",&(n))
#define rii(n,m) scanf("%d%d",&n,&m)
#define riii(n,m,k) scanf("%d%d%d",&n,&m,&k)
#define rs(s) scanf("%s",s)
#define ll long long
#define see(x) (cerr<
#define inf 0x3f3f3f3f
#define clr(a,v) memset(a,v,sizeof a)
#define lson l,m,pos<<1
#define rson m+1,r,pos<<1|1typedef pair
pii;
/////////////////////////////////
/const
int n=1e5+5
; ll t[n
<<2],col[n<<2];
intn,m,d,k,x,l,r;
ll node[n],w[n];
void up(int
pos)
void build(int l,int r,int
pos)
int m=(l+r)>>1
;build(lson);build(rson);up(pos);
}void down(int pos,intm)}
void upsum(int l,int r,int v,int l,int r,int
pos)
int m=(l+r)>>1;down(pos,r-l+1
);
if(l<=m)upsum(l,r,v,lson);if(r>m)upsum(l,r,v,rson);up(pos);
}ll qsum(
int l,int r,int l,int r,int
pos)
intmain()
else
}return0;
}
P1438 無聊的數列
板子題 按照ppt所說的,預留0號位和n 1號位,0號位位於2的若干次方的位置。但是我試了一下。沒有嚴格要求的這樣的寫法,這題也能a,資料有點水。include include include include include include include include include inclu...
P1438 無聊的數列
無聊的yyb總喜歡搞出一些正常人無法搞出的東西。有一天,無聊的yyb想出了一道無聊的題 無聊的數列。k峰 這題不是傻x題嗎 維護乙個數列,支援兩種操作 1 1 l r k d 給出乙個長度等於r l 1的等差數列,首項為k,公差為d,並將它對應加到a l a r 的每乙個數上。即 令a l a l ...
P1438 無聊的數列
無聊的yyb總喜歡搞出一些正常人無法搞出的東西。有一天,無聊的yyb想出了一道無聊的題 無聊的數列。k峰 這題不是傻x題嗎 維護乙個數列,支援兩種操作 1 1 l r k d 給出乙個長度等於r l 1的等差數列,首項為k,公差為d,並將它對應加到a l a r 的每乙個數上。即 令a l a l ...