Submission #430297

#TimeUsernameProblemLanguageResultExecution timeMemory
430297arayiPyramid Base (IOI08_pyramid_base)C++17
27 / 100
5086 ms118188 KiB
//Arayi #define _CRT_SECURE_NO_WARNINGS #include <iostream> #include <string> #include <queue> #include <stack> #include <algorithm> #include <math.h> #include <vector> #include <cstring> #include <ctime> #include <set> #include <bitset> #include <map> #include <unordered_map> #include <unordered_set> #include <iomanip> #include <ctime> #include <climits> #include <cassert> #include <chrono> #include <random> #include <complex> #define fr first #define sc second #define MP make_pair #define ad push_back #define PB push_back #define fastio ios_base::sync_with_stdio(false); cin.tie(0); cout.tie(0); #define lli long long int #define y1 arayikhalatyan #define j1 jigglypuff #define ld long double #define itn int #define pir pair<int, int> #define all(x) (x).begin(), (x).end() #define str string #define enl endl #define en endl #define cd complex<long double> #define vcd vector<cd> #define vii vector<int> #define vlli vector<lli> using namespace std; const int N = 1e6 + 30; int n, k, m, p; int x1[N], x2[N], y1[N], y2[N], c[N]; vector <pair<pair<int, int>, int> > fp[N]; lli t[4*N], flg[4*N]; void push(int nd) { t[nd] += flg[nd]; flg[nd*2] += flg[nd]; flg[nd*2+1] += flg[nd]; flg[nd] = 0; } void upd(int l, int r, int v, int nl = 1, int nr = m, int nd = 1) { push(nd); if(l > nr || r < nl) return; if(l == nl && nr == r) { flg[nd] += v; push(nd); return; } int mid = (nl + nr) / 2; upd(l, min(mid, r), v, nl, mid, nd*2); upd(max(mid + 1, l), r, v, mid + 1, nr, nd * 2 + 1); t[nd] = min(t[nd*2], t[nd*2+1]); } bool stg(int md) { for (int i = 0; i <= 4*m; i++) flg[i]=t[i]=0; upd(m - md + 1, m, k + 1); for (int i = 1; i <= n - md; i++) { for(auto& p : fp[i]) upd(p.fr.fr, p.fr.sc, p.sc); push(1); if(t[1] <= k) return 1; } return 0; } int main() { fastio; //freopen("input.in", "r", stdin); cin >> n >> m >> k >> p; for (int i = 0; i < p; i++) cin >> x1[i] >> y1[i] >> x2[i] >> y2[i] >> c[i]; int l = 1, r = min(n, m), ans = 0; while(l <= r) { int md = (l + r) / 2; for (int i = 0; i < p; i++) { fp[max(1, x1[i] - md + 1)].ad(MP(MP(max(1, y1[i] - md + 1), y2[i]), c[i])); fp[x2[i] + 1].ad(MP(MP(max(1, y1[i] - md + 1), y2[i]), -c[i])); } if(stg(md)) ans = md, l=md+1; else r=md-1; for (int i = 0; i <= n + 1; i++) fp[i].clear(); } cout << ans << endl; return 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...
#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...