Submission #157635

#TimeUsernameProblemLanguageResultExecution timeMemory
157635HungAnhGoldIBO2020Two Dishes (JOI19_dishes)C++14
0 / 100
640 ms56568 KiB
#include<bits/stdc++.h> #define int long long using namespace std; const int N = 1e6 + 3; const int inf = 1e18 + 2; int it[4 * N], lazy[4 * N], sA[N], sB[N] ,s[N], t[N], p[N], q[N]; vector<pair<int, int> > pts[N]; void init(int idx, int l, int r){ it[idx]=-inf; if(l == r){ return; } int mid = (l + r) >> 1; init(idx << 1, l, mid); init(idx << 1 | 1, mid + 1, r); } void push(int idx, int l, int r){ if(l == r){ lazy[idx] = 0; return; } it[idx << 1] += lazy[idx]; it[idx << 1 | 1] += lazy[idx]; lazy[idx << 1] += lazy[idx]; lazy[idx << 1 | 1] += lazy[idx]; lazy[idx] = 0; } void add(int idx, int l, int r, int lef, int rig, int val){ if(l > rig || r < lef){ return; } if(l >= lef && r <= rig){ it[idx] += val; lazy[idx] += val; return; } if(lazy[idx]){ push(idx, l, r); } int mid = (l + r) >> 1; add(idx << 1, l, mid, lef, rig, val); add(idx << 1 | 1, mid + 1, r, lef, rig, val); it[idx] = max(it[idx << 1], it[idx << 1 | 1]); } void upd(int idx, int l, int r, int pos, int val){ if(l > pos || r < pos){ return; } if(l == r){ it[idx] = val; lazy[idx] = 0; return; } if(lazy[idx]){ push(idx, l, r); } int mid = (l + r) >> 1; upd(idx << 1, l, mid, pos, val); upd(idx << 1 | 1, mid + 1, r, pos, val); it[idx] = max(it[idx << 1], it[idx << 1 | 1]); } int getmax(int idx, int l, int r, int lef, int rig){ if(l > rig || r < lef){ return -inf; } if(l >= lef && r <= rig){ return it[idx]; } if(lazy[idx]){ push(idx, l, r); } int mid = (l + r) >> 1; return max(getmax(idx << 1, l, mid, lef, rig), getmax(idx << 1 | 1, mid + 1, r, lef, rig)); } signed main(){ ios :: sync_with_stdio(0); cin. tie(0); int n, m, i, j, k, l, sum_val = 0; cin >> n >> m; for(i = 1; i <= n; i++){ cin >> j >> s[i] >> p[i]; sA[i] = sA[i - 1] + j; } for(i = 1; i <= m; i++){ cin >> j >> t[i] >> q[i]; sB[i] = sB[i - 1] + j; sum_val += q[i]; } for(i = 1; i <= n; i++){ j = upper_bound(sB, sB + 1 + m, s[i] - sA[i]) - sB - 1; if(j >= 0){ pts[i].push_back({j, p[i]}); } } //true for(i = 1; i <= m; i++){ j = upper_bound(sA, sA + 1 + n, t[i] - sB[i]) - sA - 1; if(j < n){ pts[j + 1].push_back({i - 1, -q[i]}); } } //true, why? consider the point moving which don't really affect the answer. init(1, 0, m); upd(1, 0, m, 0, 0); sort(pts[0].begin(), pts[0].end()); for(i = 0; i <= n; i++){ sort(pts[i + 1].begin(), pts[i + 1].end()); for(j = 0; j < pts[i].size(); j++){ add(1, 0, m, 0, pts[i][j].first, pts[i][j].second); } //chuan bi cho tong cac diem tu x' tro len for(j = 0; j < pts[i].size(); j++){ k = getmax(1, 0, m, 0, pts[i][j].first); upd(1, 0, m, pts[i][j].first, k); //cout << i << ' ' << pts[i][j].first << ' ' << k << endl; } // for(j = 0; j <= m; j++){ // k=getmax(1,0,m,0,j); // upd(1,0,m,j,k); // } if(i < n){ for(j = 0; j < pts[i + 1].size(); j++){ k = getmax(1, 0, m, 0, pts[i + 1][j].first); upd(1, 0, m, pts[i + 1][j].first, k); } } } cout << getmax(1, 0, m, 0, m) + sum_val; }

Compilation message (stderr)

dishes.cpp: In function 'int main()':
dishes.cpp:106:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(j = 0; j < pts[i].size(); j++){
              ~~^~~~~~~~~~~~~~~
dishes.cpp:109:16: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
   for(j = 0; j < pts[i].size(); j++){
              ~~^~~~~~~~~~~~~~~
dishes.cpp:119:17: warning: comparison between signed and unsigned integer expressions [-Wsign-compare]
    for(j = 0; j < pts[i + 1].size(); j++){
               ~~^~~~~~~~~~~~~~~~~~~
dishes.cpp:78:21: warning: unused variable 'l' [-Wunused-variable]
  int n, m, i, j, k, l, sum_val = 0;
                     ^
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...