結果
| 問題 |
No.142 単なる配列の操作に関する実装問題
|
| コンテスト | |
| ユーザー |
beet
|
| 提出日時 | 2021-06-20 17:53:13 |
| 言語 | C++17 (gcc 13.3.0 + boost 1.87.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,997 bytes |
| コンパイル時間 | 2,260 ms |
| コンパイル使用メモリ | 196,548 KB |
| 最終ジャッジ日時 | 2025-01-22 10:43:07 |
|
ジャッジサーバーID (参考情報) |
judge5 / judge3 |
(要ログイン)
| ファイルパターン | 結果 |
|---|---|
| other | WA * 5 |
ソースコード
#ifndef call_from_test
#include <bits/stdc++.h>
using namespace std;
#endif
//BEGIN CUT HERE
// half open interval [l, r)
template<typename T=unsigned long long>
struct BitVector{
inline static constexpr size_t B = sizeof(T) * CHAR_BIT;
size_t n;
vector<T> dat;
BitVector(size_t n_):n(n_),dat(n_/B+1,0){}
inline T get(size_t i)const{return (dat[i/B]>>(i%B))&T(1);}
void set(size_t i,bool v){
dat[i/B]&=~(T(1)<<(i%B));
dat[i/B]|=v<<(i%B);
}
// O(B + (r - l) / B)
BitVector get(size_t l,size_t r)const{
BitVector res(r-l);
if(r-l<=B){
for(size_t i=l;i<r;i++) res.set(i-l,get(i));
return res;
}
size_t p=(l+B-1)/B*B,q=r/B*B;
// [l, p)
for(size_t i=l;i<p;i++) res.set(i-l,get(i));
// [p, q)
for(size_t i=p;i<q;i+=B){
if(l%B==0) res.dat[(i-l)/B]=dat[i/B];
else{
res.dat[(i-l)/B+0]|=dat[i/B]<<(p-l);
res.dat[(i-l)/B+1]|=dat[i/B]>>(B-(p-l));
}
}
// [q, r)
for(size_t i=q;i<r;i++) res.set(i-l,get(i));
return res;
}
void set(size_t l,size_t r,const BitVector& bv){
if(r-l<=B){
for(size_t i=l;i<r;i++) set(i,bv.get(i-l));
return;
}
size_t p=(l+B-1)/B*B,q=r/B*B;
// [l, p)
for(size_t i=l;i<p;i++) set(i,bv.get(i-l));
// [p, q)
for(size_t i=p;i<q;i+=B){
if(l%B==0) dat[i/B]=bv.dat[(i-l)/B];
else dat[i/B]=(bv.dat[(i-l)/B+0]>>(p-l))|(bv.dat[(i-l)/B+1]<<(B-(p-l)));
}
// [q, r)
for(size_t i=q;i<r;i++) set(i,bv.get(i-l));
}
};
//END CUT HERE
#ifndef call_from_test
signed main(){
int n,s,x,y,z;
cin>>n>>s>>x>>y>>z;
int q;
cin>>q;
BitVector bv(n+1);
int a=s;
for(int i=1;i<=n;i++){
bv.set(i,a&1);
a=(1LL*x*a+y)%z;
}
for(int i=0;i<q;i++){
int s,t,u,v;
cin>>s>>t>>u>>v;
auto p=bv.get(s,t+1),q=bv.get(u,v+1);
for(int i=0;i<(int)p.dat.size();i++) p.dat[i]^=q.dat[i];
bv.set(u,v+1,p);
}
for(int i=1;i<=n;i++) cout<<(bv.get(i)?"O":"E");
cout<<endl;
return 0;
}
#endif
beet