結果
| 問題 |
No.2338 Range AtCoder Query
|
| コンテスト | |
| ユーザー |
沙耶花
|
| 提出日時 | 2023-06-02 22:02:25 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
AC
|
| 実行時間 | 744 ms / 4,000 ms |
| コード長 | 1,331 bytes |
| コンパイル時間 | 4,192 ms |
| コンパイル使用メモリ | 263,136 KB |
| 最終ジャッジ日時 | 2025-02-13 18:22:56 |
|
ジャッジサーバーID (参考情報) |
judge1 / judge2 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| sample | AC * 1 |
| other | AC * 34 |
ソースコード
#include <stdio.h>
#include <atcoder/all>
#include <bits/stdc++.h>
using namespace std;
using namespace atcoder;
using mint = modint998244353;
#define rep(i,n) for (int i = 0; i < (n); ++i)
#define Inf32 1000000001
#define Inf64 4000000000000000001
using P = pair<int,int>;
P op(P a,P b){
a.first += b.first;
a.second += b.second;
return a;
}
P e(){
return make_pair(0,0);
}
int main(){
int n,m,q;
cin>>n>>m>>q;
vector<int> p(n),s(n);
rep(i,n){
cin>>p[i];
p[i]--;
string ss;
cin>>ss;
if(ss[0]=='A')s[i] = 1;
else s[i] = 0;
}
vector<vector<int>> qs(n);
vector<int> l(q),r(q);
rep(i,q){
cin>>l[i]>>r[i];
l[i]--,r[i]--;
qs[r[i]].push_back(i);
}
vector<int> ac(q),wa(q);
vector<deque<int>> D(m,deque<int>(1,-1));
segtree<P,op,e> seg(n+1);
rep(i,n){
if(s[i]==0){
D[p[i]].push_back(i);
}
else{
int cnt = D[p[i]].size() - 1;
int cur = 0;
while(D[p[i]].size()>1){
int u = D[p[i]].back();
D[p[i]].pop_back();
seg.set(u,make_pair(1,0));
cur++;
}
if(D[p[i]].back()!=-1)seg.set(D[p[i]].back(),make_pair(-cur,0));
seg.set(i,make_pair(0,1));
D[p[i]].front() = i;
}
rep(j,qs[i].size()){
int ii = qs[i][j];
ac[ii] = seg.prod(l[ii],n).second;
wa[ii] =seg.prod(l[ii],n).first;
}
}
rep(i,q){
cout<<ac[i]<<' '<<wa[i]<<endl;
}
return 0;
}
沙耶花