Đề bài:
Thuật toán:
- Đây là bài thuần sử dụng cấu trúc dữ liệu IT. Các bạn có thể tham khảo thêm tại: http://adf.ly/1f54AI
Code:
uses math; const fi=''; fo=''; maxn=100000; oo =2*trunc(1e10); var a :array[0..maxn] of int64; i,j,n,p,q,m :longint; t :array[1..4*maxn] of int64; res :int64; procedure enter; var u,v,k :longint; begin readln(n,m); for i:=1 to m do begin read(u,v,k); a[u] := a[u]+ k; a[v+1] := a[v+1] -k; end; for i:=1 to n do a[i] := a[i-1] +a[i]; end; procedure update(k,l,r:longint); var m :longint; begin if l=r then begin t[k] := a[l]; exit; end; m := (l+r) div 2; update(k*2,l,m); update(k*2+1,m+1,r); t[k] := max(t[k*2],t[k*2+1]); end; procedure find(k,l,r,i,j:longint); var m :longint; begin if (i>r) or (j<l) then exit; if (i<=l) and (r<=j) then begin res := max(t[k],res); exit; end; m := (l+r) div 2; find(k*2,l,m,i,j); find(k*2+1,m+1,r,i,j); end; procedure process; begin update(1,1,n); end; procedure print; var u,v :longint; i :longint; begin read(q); for i:=1 to q do begin read(u,v); res := -oo; find(1,1,n,u,v); writeln(res); end; end; begin assign(input,fi);reset(input); assign(output,fo);rewrite(output); enter; process; print; close(input);close(output); end. |

Recent Comments