Submission #197583

#TimeUsernameProblemLanguageResultExecution timeMemory
197583stefdascaWatering can (POI13_kon)C++14
40 / 100
4086 ms9208 KiB
#include<bits/stdc++.h> #include "koninc.h" using namespace std; const int MAXN = 300001, rad = 300; int N, K, v[MAXN+5]; int buk[MAXN+5], L[1002], R[1002], ad[1002], nrbuk, aans[1002]; int srt[1002][1002]; int solve(int bk) { if(srt[bk][R[bk] - L[bk]] + ad[bk] < K) return 0; int st = 0; int dr = R[bk] - L[bk]; int ans = dr; while(st <= dr) { int mid = (st + dr) / 2; if(srt[bk][mid] + ad[bk] >= K) ans = mid, dr = mid - 1; else st = mid + 1; } return (R[bk] - L[bk]) - ans + 1; } void proc(int bk) { for(int j = L[bk]; j <= R[bk]; ++j) { v[j] += ad[bk]; srt[bk][j - L[bk]] = v[j]; } ad[bk] = 0; sort(srt[bk], srt[bk] + R[bk] - L[bk] + 1); aans[bk] = solve(bk); } void inicjuj(int n, int k, int *D) { N = n, K = k; for(int i = 0; i < n; ++i) v[i] = D[i]; for(int i = 0; i < n; ++i) { if(i % rad == 0) ++nrbuk, L[nrbuk] = i; R[nrbuk] = i; buk[i] = nrbuk; } for(int i = 0; i <= nrbuk; ++i) proc(i); } void podlej(int a, int b) { int fini = R[buk[a]]; while(a <= b && a <= fini) { ++v[a]; ++a; } proc(buk[a]); while(a < N && R[buk[a]] <= b) ++ad[buk[a]], aans[buk[a]] = solve(buk[a]), a = R[buk[a]] + 1; if(a <= b) { fini = R[buk[a]]; while(a <= b && a <= fini) { ++v[a]; ++a; } proc(buk[a]); } } int dojrzale(int a, int b) { int fini = R[buk[a]]; int ans = 0; // cout << a << " " << fini << '\n'; proc(buk[a]); while(a <= b && a <= fini) { if(v[a] >= K) ++ans; ++a; } // cout << "RC " << a << " " << ans << '\n'; while(a < N && R[buk[a]] <= b) ans += aans[buk[a]], a = R[buk[a]] + 1; // cout << "RC " << a << " " << ans << '\n'; if(a <= b) { proc(buk[a]); fini = R[buk[a]]; while(a <= b && a <= fini) { if(v[a] >= K) ++ans; ++a; } } return ans; }
#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...