quang2000

lê quang

Đóng góp: 0

Ngày sinh: 20/08/2000

Đăng ký: 07/07/2015

Lần đăng nhập cuối: 14/12/2017


Kết nối tài khoản

VOJ: Chưa kết nối

giúp tìm lỗi sai!!!

25121. Tổng Đoạn Con

Mã bài: BIT01

 

Cho dãy số có N phần tử và Q truy vấn có dạng:

1 i v: Gán a[i] = v (1 ≤ i ≤ N; |v| ≤ 109).

2 l r: Tính tổng a[l] + a[l + 1] + ... + a[r - 1] + a[r] (1 ≤ l ≤ r ≤ N).

Input

Dòng 1 chứa số nguyên N và Q (1 ≤ N, Q ≤ 105).

Dòng 2 chứa N số biểu diễn dãy a (|a[i]| ≤ 109).

Dòng 3..Q+2: Mỗi dòng chứa một truy vấn.

Output

Kết quả của mỗi truy vấn 2.

Example

Input:

4 3
1 2 3 4
2 1 4
1 1 5
2 1 4

Output:

10
14

em làm như sau 

#include<bits/stdc++.h>

using namespace std;
typedef long long ll;
const int maxn=1e5+100;
#define For(i,a,b) for(int i=(a),b_=(b);i<b_;++i)
#define Ford(i,a,b) for(int i=(a),b_=(b);i>=b_;--i)

ll a[maxn],kq[maxn];
ll t[4*maxn+5];
ll n,q,m1,h,l,r;
//******************************
void up(ll x){
  for(; x<= n; x += x & -x) t[x] += m1;
}
//**********************************
ll tt(ll x){
  ll to=0;
 for(; x>0;  x -=x & -x) to+= t[x];
  return to;
}
//**********************************
int main (){
   // freopen("xx.inp","r",stdin);
   // freopen("yy.out","w",stdout);
   // ios_base::sync_with_stdio(false);
    memset(t,0,sizeof t);
    cin>>n>>q;
    For(i,1,n+1) {cin>>a[i];  m1=a[i];  up(i);  }
    ll d=0;
    For(i,0,q){
        cin>>h>>l>>r;
        m1=r-a[l];
        if(h==1) up(l);
        else { kq[d++]=tt(r)-tt(l-1); }
    }
    For(i,0,d-1) cout<<kq[i]<<endl;
    cout<<kq[d-1];
    return 0;
}

nộp dc 0đ !!!

số cộng chũ số

cho a; dãy s[a] là dãy các số thành lập bởi công thức số tiếp theo bằng tổng của số trước nó với tổng các chữ số của số trước nó (số đầu tiên là a).
vd: s[6]= 6,12,15,21,24,30,33,39,51,69,84,96,111,114....
s[42]=42,48,60,66,78,93,105,111,114,....
==> s[6] và s[42] gặp nhau (từ 111).
cho a,b.hỏi s[a] và s[b] có gặp nhau không?