Submission #601663

#TimeUsernameProblemLanguageResultExecution timeMemory
601663jack715Meetings (IOI18_meetings)C++14
17 / 100
312 ms27764 KiB
#include "meetings.h" #include <bits/stdc++.h> #define ll long long #define pb push_back #define pp pop_back #define mp make_pair #define bb back #define ff first #define ss second using namespace std; vector<vector<ll> > tree(400005, vector<ll>(3)); vector<int> h; void build(int indx, int st, int end) { if (st == end) { if (h[st] == 1) tree[indx] = {1, 1, 1}; else tree[indx] = {0, 0, 0}; return; } int mid = (st + end) / 2; build(indx*2, st, mid); build(indx*2+1, mid+1, end); if (tree[indx*2][0] == mid-st+1) tree[indx][0] = tree[indx*2][0] + tree[indx*2+1][0]; else tree[indx][0] = tree[indx*2][0]; if (tree[indx*2+1][2] == end-mid) tree[indx][2] = tree[indx*2][2] + tree[indx*2+1][2]; else tree[indx][2] = tree[indx*2+1][2]; tree[indx][1] = max(max(tree[indx*2][1], tree[indx*2+1][1]), max(tree[indx][0], tree[indx][2])); tree[indx][1] = max(tree[indx][1], tree[indx*2][2]+tree[indx*2+1][0]); } vector<ll> query(int indx, int st, int end, int l, int r) { if (st > r || end < l) return {0, 0, 0}; if (l <= st && end <= r) return tree[indx]; int mid = (st + end) / 2; vector<ll> left = query(indx*2, st, mid, l, r); vector<ll> right = query(indx*2+1, mid+1, end, l, r); vector<ll> ans(3); if (left[0] == mid-st+1) ans[0] = left[0] + right[0]; else ans[0] = left[0]; if (right[2] == end-mid) ans[2] = left[2] + right[2]; else ans[2] = right[2]; ans[1] = max(max(left[1], right[1]), max(ans[0], ans[2])); ans[1] = max(ans[1], left[2]+right[0]); return ans; } vector<long long> minimum_costs(vector<int> H, vector<int> L, vector<int> R) { int n = H.size(), mx, Q = L.size(); h = H; build (1, 0, n-1); vector<long long> ans(Q); for (int q = 0; q < Q; q++) { ans[q] = (R[q]-L[q]+1)*2 - query(1, 0, n-1, L[q], R[q])[1]; } return ans; } /* 3 3 2 1 2 0 0 0 1 0 2 */

Compilation message (stderr)

meetings.cpp: In function 'std::vector<long long int> minimum_costs(std::vector<int>, std::vector<int>, std::vector<int>)':
meetings.cpp:70:21: warning: unused variable 'mx' [-Wunused-variable]
   70 |   int n = H.size(), mx, Q = L.size();
      |                     ^~
#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...