Submission #1127411

#TimeUsernameProblemLanguageResultExecution timeMemory
1127411VinhLuuElection (BOI18_election)C++20
100 / 100
454 ms22388 KiB
#include <bits/stdc++.h>
#define ll long long
#define all(lpv) lpv.begin(), lpv.end()
#define pot(x, y) lower_bound(x.begin(), x.end(), y) - x.begin() + 1
using namespace std;

#define lpv

#ifndef lpv
#include "AC.h"
#endif // lpv

const int N = 1e6 + 5;
const int oo = 1e9;

int n, q, a[N];

struct node {
  int le, ri, kq, val;
} st[N << 2];

node me(node _left, node _right) {
  node now = {0, 0, 0, 0};
  now.val = _left.val + _right.val;
  now.le = max(_left.le, _left.val + _right.le);
  now.ri = max(_right.ri, _right.val + _left.ri);
  now.kq = max({_left.le + _right.ri, _left.kq + _right.val, _right.kq + _left.val});
  return now;
}

void build(int i,int l,int r) {
  if(l == r) {
    if(a[l] == 1) st[i] = {1, 1, 1, 1};
    else st[i] = {0, 0, -1, -1};
    return;
  }
  int mid = (l + r) / 2;
  build(i << 1, l, mid);
  build(i << 1|1, mid + 1, r);
  st[i] = me(st[i << 1], st[i << 1|1]);
//  cerr << i << " " << l << " " << r << "\n";
//  cerr << st[i].le << " " << st[i].ri << " " << st[i].kq << " " << st[i].val << " h\n";
}

node get(int i,int l,int r,int u,int v) {
  if(l > r || r < u || v < l) return {0, 0, 0, 0};
  if(u <= l && r <= v) return st[i];
  int mid = (l + r) / 2;
  return me(get(i << 1, l, mid, u, v), get(i << 1|1, mid + 1, r, u, v));
}

#ifdef lpv
signed main() {
  ios_base::sync_with_stdio(0); cin.tie(0); cout.tie(0);
  #define task "v"
  if(fopen(task ".inp","r")) {
    freopen(task ".inp","r",stdin);
    freopen(task ".out","w",stdout);
  }
  cin >> n;
  string str; cin >> str;
  str = " " + str;
  for(int i = 1; i <= n; i ++) {
    if(str[i] == 'C') a[i] = -1;
    else a[i] = 1;
  }
  build(1, 1, n);
  cin >> q;
  while(q--) {
    int l, r; cin >> l >> r;
    cout << get(1, 1, n, l, r).kq << "\n";
  }
}
#endif // lpv

Compilation message (stderr)

election.cpp: In function 'int main()':
election.cpp:57:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   57 |     freopen(task ".inp","r",stdin);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
election.cpp:58:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)' declared with attribute 'warn_unused_result' [-Wunused-result]
   58 |     freopen(task ".out","w",stdout);
      |     ~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...
#Verdict Execution timeMemoryGrader output
Fetching results...