Submission #4558460
Source Code Expand
#include<bits/stdc++.h>
using namespace std;
using Int = long long;
template<typename T1,typename T2> inline void chmin(T1 &a,T2 b){if(a>b) a=b;}
template<typename T1,typename T2> inline void chmax(T1 &a,T2 b){if(a<b) a=b;}
template<typename K, size_t N>
struct SquareMatrix{
typedef array<K, N> arr;
typedef array<arr, N> mat;
mat dat;
SquareMatrix(){
for(size_t i=0;i<N;i++)
for(size_t j=0;j<N;j++)
dat[i][j]=K(0);
}
size_t size() const{return N;};
arr& operator[](size_t k){return dat[k];};
const arr& operator[](size_t k) const {return dat[k];};
static SquareMatrix cross(const SquareMatrix &A,const SquareMatrix &B){
SquareMatrix res;
for(size_t i=0;i<N;i++)
for(size_t j=0;j<N;j++)
for(size_t k=0;k<N;k++)
res[i][j]+=A[i][k]*B[k][j];
return res;
}
static SquareMatrix identity(){
SquareMatrix res;
for(size_t i=0;i<N;i++) res[i][i]=K(1);
return res;
}
SquareMatrix pow(long long n) const{
SquareMatrix a,res=identity();
for(size_t i=0;i<N;i++)
for(size_t j=0;j<N;j++)
a[i][j]=dat[i][j];
while(n){
if(n&1) res=cross(res,a);
a=cross(a,a);
n>>=1;
}
return res;
}
};
template<typename T,T MOD = 1000000007>
struct Mint{
T v;
Mint():v(0){}
Mint(signed v):v(v){}
Mint(long long t){v=t%MOD;if(v<0) v+=MOD;}
Mint pow(long long k){
Mint res(1),tmp(v);
while(k){
if(k&1) res*=tmp;
tmp*=tmp;
k>>=1;
}
return res;
}
Mint inv(){return pow(MOD-2);}
Mint& operator+=(Mint a){v+=a.v;if(v>=MOD)v-=MOD;return *this;}
Mint& operator-=(Mint a){v+=MOD-a.v;if(v>=MOD)v-=MOD;return *this;}
Mint& operator*=(Mint a){v=1LL*v*a.v%MOD;return *this;}
Mint& operator/=(Mint a){return (*this)*=a.inv();}
Mint operator+(Mint a) const{return Mint(v)+=a;};
Mint operator-(Mint a) const{return Mint(v)-=a;};
Mint operator*(Mint a) const{return Mint(v)*=a;};
Mint operator/(Mint a) const{return Mint(v)/=a;};
Mint operator-(){return v?MOD-v:v;}
bool operator==(const Mint a)const{return v==a.v;}
bool operator!=(const Mint a)const{return v!=a.v;}
bool operator <(const Mint a)const{return v <a.v;}
};
struct FastIO{
FastIO(){
cin.tie(0);
ios::sync_with_stdio(0);
}
}fastio_beet;
template<typename T>
vector<T> compress(vector<T> v){
sort(v.begin(),v.end());
v.erase(unique(v.begin(),v.end()),v.end());
return v;
}
template<typename T>
map<T, Int> dict(const vector<T> &v){
map<T, Int> res;
for(Int i=0;i<(Int)v.size();i++)
res[v[i]]=i;
return res;
}
template <typename T, typename F>
struct SegmentTree{
Int n;
F f;
T ti;
vector<T> dat;
SegmentTree(){};
SegmentTree(F f,T ti):f(f),ti(ti){}
void init(Int n_){
n=1;
while(n<n_) n<<=1;
dat.assign(n<<1,ti);
}
void build(const vector<T> &v){
Int n_=v.size();
init(n_);
for(Int i=0;i<n_;i++) dat[n+i]=v[i];
for(Int i=n-1;i;i--)
dat[i]=f(dat[(i<<1)|0],dat[(i<<1)|1]);
}
void set_val(Int k,T x){
dat[k+=n]=x;
while(k>>=1)
dat[k]=f(dat[(k<<1)|0],dat[(k<<1)|1]);
}
T query(Int a,Int b){
T vl=ti,vr=ti;
for(Int l=a+n,r=b+n;l<r;l>>=1,r>>=1) {
if(l&1) vl=f(vl,dat[l++]);
if(r&1) vr=f(dat[--r],vr);
}
return f(vl,vr);
}
};
signed DDCC2019_FINAL_D(){
string s;
cin>>s;
using M = SquareMatrix<unsigned, 6>;
auto f=[](M a,M b){return M::cross(a,b);};
M ti=M::identity();
SegmentTree<M, decltype(f)> seg(f,ti);
vector<M> vt(s.size(),ti);
for(int i=0;i<(int)s.size();i++){
if(s[i]=='D') vt[i][0][1]=1;
if(s[i]=='I') vt[i][1][2]=1;
if(s[i]=='S') vt[i][2][3]=1;
if(s[i]=='C') vt[i][3][4]=1;
if(s[i]=='O') vt[i][4][5]=1;
}
seg.build(vt);
int q;
cin>>q;
for(int i=0;i<q;i++){
int l,r;
cin>>l>>r;
l--;
cout<<seg.query(l,r)[0][5]<<"\n";
}
cout<<flush;
return 0;
}
/*
verified on 2019/02/23
https://atcoder.jp/contests/ddcc2019-final/tasks/ddcc2019_final_d
*/
signed main(){
DDCC2019_FINAL_D();
return 0;
}
Submission Info
| Submission Time |
|
| Task |
D - DISCO! |
| User |
beet |
| Language |
C++14 (GCC 5.4.1) |
| Score |
700 |
| Code Size |
4283 Byte |
| Status |
AC |
| Exec Time |
1089 ms |
| Memory |
437916 KiB |
Judge Result
| Set Name |
Sample |
All |
| Score / Max Score |
0 / 0 |
700 / 700 |
| Status |
|
|
| Set Name |
Test Cases |
| Sample |
sample_01.txt, sample_02.txt |
| All |
sample_01.txt, sample_02.txt, sub1_in01.txt, sub1_in02.txt, sub2_in01.txt, sub2_in02.txt, sub2_in03.txt, sub2_in04.txt |
| Case Name |
Status |
Exec Time |
Memory |
| sample_01.txt |
AC |
1 ms |
256 KiB |
| sample_02.txt |
AC |
1 ms |
256 KiB |
| sub1_in01.txt |
AC |
493 ms |
436892 KiB |
| sub1_in02.txt |
AC |
495 ms |
437020 KiB |
| sub2_in01.txt |
AC |
1082 ms |
437916 KiB |
| sub2_in02.txt |
AC |
1069 ms |
437916 KiB |
| sub2_in03.txt |
AC |
1089 ms |
437148 KiB |
| sub2_in04.txt |
AC |
1056 ms |
437148 KiB |