Submission #349260

#TimeUsernameProblemLanguageResultExecution timeMemory
349260parsabahramiGrowing Trees (BOI11_grow)C++17
100 / 100
330 ms3436 KiB
// Call my Name and Save me from The Dark #include <bits/stdc++.h> using namespace std; typedef long long int ll; typedef pair<int, int> pii; #define SZ(x) (int) x.size() #define F first #define S second const int N = 1e5 + 10; int F[N], A[N], n, q; void upd(int pos, int x) { for (; pos < N; pos += pos & -pos) F[pos] += x; } int get(int pos) { int ret = 0; for (; pos; pos -= pos & -pos) ret += F[pos]; return ret; } int Find(int x) { int res = 0, sum = 0; for (int i = 19; ~i; i--) { res += (1 << i); if (res < N && sum + F[res] <= x) sum += F[res]; else res -= (1 << i); } return res; } inline void add(int l, int r) { if (r < l) return; upd(l, 1), upd(r + 1, -1); } void print() { for (int i = 1; i <= n; i++) printf("%d ", get(i)); printf("\n"); } int main() { scanf("%d%d", &n, &q); for (int i = 1; i <= n; i++) scanf("%d", &A[i]); sort(A + 1, A + n + 1); for (int i = 1; i <= n; i++) upd(i, A[i]), upd(i + 1, -A[i]); upd(n + 1, 2e9); //print(); for (; q; q--) { char t; int c, h; cin >> t >> c >> h; if (t == 'F') { int l = Find(h - 1) + 1; c = min(c, n + 1 - l); int x = get(l + c - 1); int r = Find(x - 1); r = max(r, l - 1); add(l, r); int b = Find(x); //printf("l %d r %d x %d b %d\n", l, r, x, b); add(b - (l + c - 1 - r) + 1, b); //print(); } else { printf("%d\n", Find(h) - Find(c - 1)); } } return 0; }

Compilation message (stderr)

grow.cpp: In function 'int main()':
grow.cpp:47:10: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   47 |     scanf("%d%d", &n, &q);
      |     ~~~~~^~~~~~~~~~~~~~~~
grow.cpp:48:39: warning: ignoring return value of 'int scanf(const char*, ...)', declared with attribute warn_unused_result [-Wunused-result]
   48 |     for (int i = 1; i <= n; i++) scanf("%d", &A[i]);
      |                                  ~~~~~^~~~~~~~~~~~~
#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...