結果

問題 No.2338 Range AtCoder Query
ユーザー niuezniuez
提出日時 2023-06-02 22:18:00
言語 C++17
(gcc 13.3.0 + boost 1.87.0)
結果
WA  
実行時間 -
コード長 3,740 bytes
コンパイル時間 1,715 ms
コンパイル使用メモリ 122,528 KB
最終ジャッジ日時 2025-02-13 18:46:26
ジャッジサーバーID
(参考情報)
judge3 / judge1
このコードへのチャレンジ
(要ログイン)
ファイルパターン 結果
sample AC * 1
other AC * 6 WA * 11 TLE * 17
権限があれば一括ダウンロードができます

ソースコード

diff #

#include <iostream>
#include <vector>
#include <algorithm>
#include <deque>
#include <cmath>

using namespace std;
using i64 = long long;
#define rep(i,s,e) for(i64 (i) = (s);(i) < (e);(i)++)
#define all(x) x.begin(),x.end()
#define STRINGIFY(n) #n
#define TOSTRING(n) STRINGIFY(n)
#define PREFIX "#" TOSTRING(__LINE__) "| "
#define debug(x) \
{ \
  std::cout << PREFIX << #x << " = " << x << std::endl; \
}
std::ostream& output_indent(std::ostream& os, int ind) {
  for(int i = 0; i < ind; i++) os << " ";
  return os;
}
template<class S, class T> std::ostream& operator<<(std::ostream& os, const std::pair<S, T>& p);
template<class T> std::ostream& operator<<(std::ostream& os, const std::vector<T>& v);
template<class S, class T> std::ostream& operator<<(std::ostream& os, const std::pair<S, T>& p) {
  return (os << "(" << p.first << ", " << p.second << ")");
}
template<class T> std::ostream& operator<<(std::ostream& os, const std::vector<T>& v) {
  os << "[";
  for(int i = 0;i < v.size();i++) os << v[i] << ", ";
  return (os << "]");
}
template<class T>
static inline std::vector<T> ndvec(size_t&& n, T val) { return std::vector<T>(n, std::forward<T>(val)); }
template<class... Tail>
static inline auto ndvec(size_t&& n, Tail&&... tail) {
  return std::vector<decltype(ndvec(std::forward<Tail>(tail)...))>(n, ndvec(std::forward<Tail>(tail)...));
}

struct Mo {
  vector<i64> left, right, order;
  vector<bool> v;
  

  const i64 width;
  i64 nl, nr, ptr;

  vector<int> P;
  vector<int> S;
  vector<deque<int>> was;
  i64 AC = 0;
  i64 WA = 0;

  Mo(i64 n) : v(n), width((i64)sqrt(n)), nl(0), nr(0), ptr(0) {}

  void add_query(i64 l, i64 r) {
    left.push_back(l);
    right.push_back(r);
  }

  void build() {
    order.resize(left.size());
    for(i64 i = 0;i < left.size();i++) order[i] = i;
    sort(begin(order), end(order), [&](i64 a, i64 b) {
        if(left[a] / width != left[b] / width) return left[a] < left[b];
        else return right[a] < right[b];
        });
  }


  i64 process() {
    if(ptr == order.size()) return -1;
    const auto id = order[ptr];
    while(nl > left[id]) {
      // left add
      --nl;
      int p = P[nl];
      if(S[nl] == 0) {
        was[p].front()++;
        if(was[p].size() > 1) WA++;
      }
      else {
        if(was[p].size() == 1) AC++;
        was[p].push_front(0);
      }
    }
    while(nr < right[id]) {
      int p = P[nr];
      if(S[nr] == 0) {
        was[p].back()++;
      }
      else {
        if(was[p].size() == 1) {
          AC++;
          WA += was[p].back();
        }
        was[p].push_back(0);
      }
      nr++;
    }
    while(nl < left[id]) {
      int p = P[nl];
      if(S[nl] == 0) {
        was[p].front()--;
        if(was[p].size() > 1) WA--;
      }
      else {
        if(was[p].size() == 2) AC--;
        was[p].pop_front();
      }
      nl++;
    }
    while(nr > right[id]) {
      nr--;
      int p = P[nr];
      if(S[nr] == 0) {
        was[p].back()--;
      }
      else {
        if(was[p].size() == 2) {
          AC--;
          WA -= was[p].back();
        }
        was[p].pop_back();
      }
    }
    return order[ptr++];
  }
};

int main() {
  int N, M, Q;
  cin >> N >> M >> Q;
  Mo mo(N);
  mo.P.resize(N);
  mo.S.resize(N);
  mo.was.resize(M, std::deque<int> { 0 });
  for(int i = 0; i < N; i++) {
    int p;
    string s;
    cin >> p >> s;
    mo.P[i] = p - 1;
    mo.S[i] = s == "AC" ? 1 : 0;
  }
  for(int i = 0; i < Q; i++) {
    int l, r;
    cin >> l >> r;
    mo.add_query(l - 1, r);
  }
  mo.build();

  std::vector<int> A(Q), B(Q);
  for(int i = 0; i < Q; i++) {
    int q = mo.process();
    A[q] = mo.AC;
    B[q] = mo.WA;
  }
  for(int i = 0; i < Q; i++) {
    cout << A[i] << " " << B[i] << endl;
  }
}
0