Submission #834145

#TimeUsernameProblemLanguageResultExecution timeMemory
834145rainboyProgression (NOI20_progression)C11
0 / 100
162 ms57548 KiB
#include <stdio.h> #define N 300000 #define N_ (1 << 19) /* N_ = pow2(ceil(log2(N))) */ int max(int a, int b) { return a > b ? a : b; } int kk[N_ * 2]; long long aap[N_ * 2]; int kkp[N_ * 2]; long long aaq[N_ * 2]; int kkq[N_ * 2]; int kk_[N_ * 2]; int n_; void pul(int i) { int l = i << 1, r = l | 1; aap[i] = aap[l], kkp[i] = kkp[l] < kk[l] || aap[l] != aap[r] ? kkp[l] : kk[l] + kkp[r]; aaq[i] = aaq[r], kkq[i] = kkq[r] < kk[r] || aaq[l] != aaq[r] ? kkq[r] : kkq[l] + kk[r]; kk_[i] = max(kk_[l], kk_[r]); if (aaq[l] == aap[r]) kk_[i] = max(kk_[i], kkq[l] + kkp[r]); } void build(int *aa, int n) { int i; n_ = 1; while (n_ < n - 1) n_ <<= 1; for (i = 0; i + 1 < n; i++) { kk[n_ + i] = 1; aap[n_ + i] = aaq[n_ + i] = aa[i + 1] - aa[i], kkp[n_ + i] = kkq[n_ + i] = kk_[n_ + i] = 1; } for (i = n_ - 1; i > 0; i--) kk[i] = kk[i << 1 | 0] + kk[i << 1 | 1], pul(i); } int query(int l, int r) { long long aq, ap; int kq, kp, k_; aq = 0, kq = 0, ap = 0, kp = 0, k_ = 0; for (l += n_, r += n_; l <= r; l >>= 1, r >>= 1) { if ((l & 1) == 1) { k_ = max(k_, kk_[l]); if (aq == aap[l]) k_ = max(k_, kq + kkp[l]); aq = aaq[l], kq = kkq[l] < kk[l] || aq != aaq[l] ? kkq[l] : kq + kkq[l]; l++; } if ((r & 1) == 0) { k_ = max(kk_[r], k_); if (aaq[r] == ap) k_ = max(k_, kkq[r] + kp); ap = aap[r], kp = kkp[r] < kk[r] || aap[r] != ap ? kkp[r] : kkp[r] + kp; r--; } } if (aq == ap) k_ = max(k_, kq + kp); return k_; } int main() { static int aa[N]; int n, q, i; scanf("%d%d", &n, &q); for (i = 0; i < n; i++) scanf("%d", &aa[i]); build(aa, n); while (q--) { int t, l, r; scanf("%d%d%d", &t, &l, &r), l--, r--; printf("%d\n", l == r ? 1 : query(l, r - 1) + 1); } return 0; }

Compilation message (stderr)

Progression.c: In function 'main':
Progression.c:68:2: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   68 |  scanf("%d%d", &n, &q);
      |  ^~~~~~~~~~~~~~~~~~~~~
Progression.c:70:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   70 |   scanf("%d", &aa[i]);
      |   ^~~~~~~~~~~~~~~~~~~
Progression.c:75:3: warning: ignoring return value of 'scanf' declared with attribute 'warn_unused_result' [-Wunused-result]
   75 |   scanf("%d%d%d", &t, &l, &r), l--, r--;
      |   ^~~~~~~~~~~~~~~~~~~~~~~~~~~
#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...