#include #include #include using namespace std; #define MAX 150105 #define lch(i) ((i)<<1) #define rch(i) ((i)<<1|1) struct rec{ __int64 x1,y1,x2,y2,v; }; struct segment{ __int64 l,r,h,val; }; struct tree{ int l,r,cnt,sum; int mid() { return (l+r)>>1; } }; typedef struct rec rec; typedef struct segment segment; typedef struct tree tree; rec rr[MAX]; segment ss[MAX]; tree tt[MAX]; __int64 pos[MAX]; __int64 v[MAX]; int N,M; int cmp_rec(rec a ,rec b) { return a.v < b.v; } int cmp_segment(segment a , segment b) { return a.h < b.h; } void input() { scanf("%d%d",&N,&M); for(int i=1; i<=M; i++) scanf("%I64d",&v[i]); for(int i=0; i>1; if(pos[mid]==key) return mid; else if(key < pos[mid]) high=mid-1; else low=mid+1; } return -1; } void cal(int rt) { if(tt[rt].cnt) tt[rt].sum=pos[tt[rt].r+1]-pos[tt[rt].l]; else if(tt[rt].l==tt[rt].r) tt[rt].sum=0; else tt[rt].sum=tt[lch(rt)].sum + tt[rch(rt)].sum; } void updata(int l , int r , int val ,int rt) { if(tt[rt].l==l && tt[rt].r==r) { tt[rt].cnt += val ; cal(rt); return ; } int mid=tt[rt].mid(); if(r<=mid) updata(l,r,val,lch(rt)); else if(l>mid) updata(l,r,val,rch(rt)); else { updata(l,mid,val,lch(rt)); updata(mid+1,r,val,rch(rt)); } cal(rt); } __int64 solve(int nn) { int m=0; for(int i=nn; i