Nộp bài | Các bài nộp | Làm tốt nhất | Về danh sách bài |
QMAX - Giá trị lớn nhất |
Hiện tại, bài tập này đã có trên online judge chính thức của VNOI, bạn có thể truy cập ở đây: https://oj.vnoi.info/problem/qmax
Cho một dãy gồm n phần tử có giá trị ban đầu bằng 0.
Cho m phép biến đổi, mỗi phép có dạng (u, v, k): tăng mỗi phần tử từ vị trí u đến vị trí v lên k đơn vị.
Cho q câu hỏi, mỗi câu có dạng (u, v): cho biết phần tử có giá trị lớn nhất thuộc đoạn [u, v]
Giới hạn
- n, m, q <= 50000
- k > 0
- Giá trị của một phần tử luôn không vượt quá 231-1
Input
- Dòng 1: n, m
- m dòng tiếp theo, mỗi dòng chứa u, v, k cho biết một phép biến đổi
- Dòng thứ m+2: p
- p dòng tiếp theo, mỗi dòng chứa u, v cho biết một phép biến đổi
Output
- Gồm p dòng chứa kết quả tương ứng cho từng câu hỏi.
Example
Input: 6 2 1 3 2 4 6 3 1 3 4 Output: 3
Được gửi lên bởi: | Nguyen Dinh Tu |
Ngày: | 2006-11-16 |
Thời gian chạy: | 1s |
Giới hạn mã nguồn: | 50000B |
Memory limit: | 1536MB |
Cluster: | Cube (Intel G860) |
Ngôn ngữ cho phép: | Tất cả ngoại trừ: ERL GOSU JS-RHINO NODEJS PERL6 PYPY RUST SED VB.NET |
hide comments
|
|||||||||||
2016-11-09 10:47:32
ac Last edit: 2016-11-23 03:38:47 |
|||||||||||
2016-11-01 10:01:58
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. |
|||||||||||
2016-10-25 12:12:39 xin đừng quên tôi
THAM KHẢO THUẬT TOÁN VÀ CODE TẠI: http://yeulaptrinh.pw/398/qmax-spoj/ |
|||||||||||
2016-10-19 16:51:54
bài nào ghi ra nhiều kết quả như này, tui toàn ghi write thay vì writeln không ak, nên sai :v bốn lần rồi vẫn chưa chừa, có bạn nào như tui hơm? |
|||||||||||
2016-10-01 16:46:35
rmq chạy sinh lỗi :: it AC |
|||||||||||
2016-09-24 10:21:34
bài nào cũng có thanh niên AC |
|||||||||||
2016-09-19 14:07:00
RMQ AC :3 |
|||||||||||
2016-04-13 15:23:45
RMQ hình khá nhanh hơn IT nhĩ @@@ |
|||||||||||
2016-03-08 05:25:14
code trâu AC được thì tài |
|||||||||||
2016-02-12 07:59:35 Nguyễn Thành Nhân
duyệt trâu đặt cận nhé |