Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <bits/stdc++.h>
- #define nmax 100001
- #define MOD 9901
- using namespace std;
- ifstream f("aepim.in");
- ofstream g("aepim.out");
- struct MATRICE
- {
- int a[4][4];
- };
- MATRICE arb[4*nmax+55],A,prod_mat;
- int i,n,m,x,y,t,K;
- char v[10],Y[10];
- void sir_mat(char sir[])
- {
- int i=1;
- for(int j=1;j<=K*K;++j)
- {
- if(j%K!=0)
- A.a[i][j%K]=sir[j-1]-'0';
- else
- A.a[i][K]=sir[j-1]-'0';
- if(j%K==0)
- ++i;
- }
- }
- void inm_mat(MATRICE a,MATRICE b)
- {
- for(int i=1;i<=K;++i)
- for(int j=1;j<=K;++j)
- {
- prod_mat.a[i][j]=0;
- for(int k=1;k<=K;++k)
- prod_mat.a[i][j]=(prod_mat.a[i][j]+(a.a[i][k]*b.a[k][j]))%MOD;
- }
- }
- void update(int nod,int st,int dr,int poz,char val[])
- {
- if(st==dr)
- {
- sir_mat(val),arb[nod]=A;/// arb[nod]=val;
- return;
- }
- int mij=(st+dr)/2;
- if(poz<=mij)update(2*nod,st,mij,poz,val);
- else update(2*nod+1,mij+1,dr,poz,val);
- inm_mat(arb[2*nod],arb[2*nod+1]); /// arb[nod]=produsul(arb[2*nod],arb[2*nod+1]);
- arb[nod]=prod_mat;
- }
- void query(int nod,int st,int dr,int a,int b)
- {
- if(a<=st&&dr<=b)
- {
- inm_mat(prod_mat,arb[nod]); /// produs=produsul(mi,arb[nod]);
- return;
- }
- int mij=(st+dr)/2;
- if(a<=mij)query(2*nod,st,mij,a,b);
- if(mij<b)query(2*nod+1,mij+1,dr,a,b);
- }
- void Afisez(MATRICE a)
- {
- for(int i=1;i<=K;++i)
- for(int j=1;j<=K;++j)
- g<<a.a[i][j]<<' ';
- g<<'\n';
- }
- int main()
- {
- f>>n>>K;
- for(i=1;i<=n;++i)
- {
- f>>v;
- update(1,1,n,i,v);
- }
- f>>m;
- while(m--)
- {
- f>>t;
- if(t==1)
- {
- f>>x>>y; /// y - numar
- for(int i=1;i<=K;++i)
- for(int j=1;j<=K;++j)
- if(i!=j)
- prod_mat.a[i][j]=0;
- else
- prod_mat.a[i][j]=1;
- query(1,1,n,x,y);
- Afisez(prod_mat);
- }
- else
- {
- f>>x>>Y; /// Y - sir
- update(1,1,n,x,Y);
- }
- }
- return 0;
- }
Add Comment
Please, Sign In to add comment