#Day1:线段树
#include <bits/stdc++.h>
using namespace std;
#define ll long long
#define ull unsigned long long
#define pb push_back
#define ld long double
#define LEFT POS*2
#define RIGHT POS*2+1
const int N=1e5;
ll a[N]={NULL,1,2,3,4,5,6,7,8,9,10};
struct Node{
ll l=-1,r;
ll sum,lazy=0;
} tr[N];
inline void push_down(ll l, ll r, ll POS){
tr[LEFT].lazy+=tr[POS].lazy;
tr[RIGHT].lazy+=tr[POS].lazy;
tr[LEFT].sum+=tr[POS].lazy*((r-l+1)-(r-l+1)/2);
tr[RIGHT].sum+=tr[POS].lazy*(r-l+1)/2;
tr[POS].lazy=0;
}
void build(ll l, ll r, ll POS){
tr[POS].l=l,tr[POS].r=r;
if(l==r){
tr[POS].sum=a[l];
}
else{
ll mid=(l+r)/2;
build(l,mid,LEFT);
build(mid+1,r,RIGHT);
tr[POS].sum=tr[LEFT].sum+tr[RIGHT].sum;
}
return;
}
void modify(ll l, ll r, ll v, ll cl, ll cr, ll POS){
if(l>cr||r<cl)return;
else if(l>=cl&&r<=cr){
tr[POS].sum+=v*(r-l+1);
if(r>l)tr[POS].lazy+=v;
}
else{
ll mid=(l+r)/2;
push_down(l,r,POS);
modify(l,mid,v,cl,cr,LEFT);
modify(mid+1,r,v,cl,cr,RIGHT);
tr[POS].sum=tr[LEFT].sum+tr[RIGHT].sum;
}
return;
}
ll query(ll l, ll r, ll cl, ll cr, ll POS){
if(l>cr||r<cl)return 0;
else if(l>=cl&&r<=cr) return tr[POS].sum;
else{
ll mid=(l+r)/2;
push_down(l,r,POS);
return query(l,mid,cl,cr,LEFT)+query(mid+1,r,cl,cr,RIGHT);
}
}