Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 262144/262144 K (Java/Others)
Total Submission(s): 698 Accepted Submission(s): 224
ios
題意:app
n個區間 [)前閉後開型,每一個區間左中右分別三個花費,問哪一個點花費最大。ide
題解:ui
由於點能夠取任意實數,區間是整數,因此距離區間端點0.5的點都是可能的點,將區間左右端點*2,每一個區間離散化成 l-1, l, r這三個點。而後掃描線去遍歷,碰到左邊邊界 +a-c; 右邊界 +b-a;this
代碼:spa
1 #include <iostream> 2 #include <algorithm> 3 #include <cstring> 4 #include <cstdio> 5 #include <bitset> 6 #include <vector> 7 #include <queue> 8 #include <stack> 9 #include <cmath> 10 #include <list> 11 #include <set> 12 #include <map> 13 #define rep(i,a,b) for(int i = a;i <= b;++ i) 14 #define per(i,a,b) for(int i = a;i >= b;-- i) 15 #define mem(a,b) memset((a),(b),sizeof((a))) 16 #define FIN freopen("in.txt","r",stdin) 17 #define FOUT freopen("out.txt","w",stdout) 18 #define IO ios_base::sync_with_stdio(0),cin.tie(0) 19 #define mid ((l+r)>>1) 20 #define ls (id<<1) 21 #define rs ((id<<1)|1) 22 #define N 50005 23 #define INF 0x3f3f3f3f 24 #define INFF ((1LL<<62)-1) 25 typedef long long LL; 26 using namespace std; 27 28 int T, n, HASH[N*3], l[N], r[N], a[N], b[N], c[N]; 29 LL cost[N*3]; 30 int main() 31 {IO; 32 //FIN; 33 cin >> T; 34 while(T--){ 35 cin >> n; 36 int len = 0; 37 LL tol = 0; 38 rep(i, 1, n){ 39 cin >> l[i] >> r[i] >> a[i] >> b[i] >> c[i]; 40 l[i] <<= 1; r[i] <<= 1; 41 HASH[len++] = l[i]; HASH[len++] = l[i]-1; HASH[len++] = r[i]; 42 tol += c[i]; 43 } 44 sort(HASH, HASH+len); 45 int size = unique(HASH, HASH+len)-HASH; 46 LL ans = tol; 47 mem(cost, 0); 48 49 rep(i, 1, n){ 50 l[i] = lower_bound(HASH, HASH+size, l[i])-HASH; 51 r[i] = lower_bound(HASH, HASH+size, r[i])-HASH; 52 cost[l[i]] += a[i]-c[i]; 53 cost[r[i]+1] += b[i]-a[i]; 54 } 55 rep(i, 0, size-1){ 56 tol += cost[i]; 57 ans = max(ans, tol); 58 } 59 cout << ans << endl; 60 } 61 return 0; 62 }