15:细菌的繁殖和扩散

总时间限定: 
1000ms

内存限制: 
65536kB

描述
当边长为9之正方形作育皿中,正着力岗位来m个细菌。尽管细菌的寿命就一上,但每一日可繁殖10个后代,而且就10单后代,有零星只分布于原先的单元格中,此外的全都匀分布于该周围相邻的八单单元格中。求经过n(1≤n≤4)天后,细菌在塑造皿中的遍布意况。

输入
输入为少独整数,第一独整数m表示中央岗位细菌的个数(2 ≤ m ≤
30),第二单整数n表示通过的流年(1 ≤ n ≤ 4)。

输出
输出九行九列整数矩阵,每行的整数之间用空格分隔。整个矩阵代表n天后细菌在养皿上之分布意况。

样例输入
2 1

样例输出
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 2 4 2 0 0 0
0 0 0 2 2 2 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0
0 0 0 0 0 0 0 0 0

来源
交大教育学部07总结概论模拟考试1

 1 #include<iostream>
 2 #include<cstring>
 3 #include<cmath>
 4 using namespace std;
 5 int main() {
 6     int n,m,i,j,k;
 7     int a[105][105],b[105][105];
 8     memset(a,0,sizeof(a));
 9     cin>>m>>n;
10     a[5][5]=m;
11     for (k=1; k<=n; ++k) {
12         for (i=1; i<=9; ++i)
13             for (j=1; j<=9; ++j)
14                 b[i][j]=2*a[i][j]+a[i-1][j-1]+a[i][j-1]+a[i+1][j-1]
15                         +a[i-1][j]+a[i+1][j]+a[i-1][j+1]+a[i][j+1]+a[i+1][j+1];
16         for (i=1; i<=9; ++i)
17             for (j=1; j<=9; ++j) {
18                 a[i][j]=b[i][j];
19                 b[i][j]=0;
20             }
21     }
22     for (i=1; i<=9; ++i) {
23         for (j=1; j<=9; ++j)
24             cout<<a[i][j]<<" ";
25         cout<<endl;
26     }
27     return 0;
28 }

 

到底时限定: 
10000ms

单个测试点时间限制: 
1000ms

内存限制: 
262144kB

描述
于一个长为N的数列,有M次操作,每趟操作是以下简单种有:

(1)修改数排列着之一个屡次

(2)求数列着之一地方在某次操作后的价值

输入
先是履行两单正整数N和M。
亚行N独整数表示此数列。
连片下去M行,每行最先是一个字符,若该字符为’M’,则意味一个修改操作,接下少只整数x和y,表示把x地方的价值修改为y;若该字符为’Q’,则代表一个询问操作,接下去少单整数x和y,表示求x地点于第y不善操作后的价。

输出
针对各国一个打听操作单独输出一行,表示答案。

样例输入
5 3
1 2 3 4 5
Q 1 0
M 1 3
Q 1 2

样例输出
1
3

提示
1<=N<=10^5,1<=M<=10^5,输入保证合法,且具备整数可用带符号32号整型存储。

多多丁第一肉眼观察这道题道只要就此主席树啊的了。

但是。

rope大法好!!。

没什么好讲的,就是个裸地不能再一次裸地模板题,,,

 

#include<iostream>
#include<cstdio>
#include<cstring>
#include<cmath>
#include<algorithm>
#include<ext/rope>
using namespace std;
using namespace __gnu_cxx;
const int MAXN=2000050;
const int maxn=0x7fffffff;
void read(int &n)
{
    char c='+';int x=0;bool flag=0;
    while(c<'0'||c>'9'){c=getchar();if(c=='-')flag=1;}
    while(c>='0'&&c<='9'){x=x*10+(c-48);c=getchar();}
    flag==1?n=-x:n=x;
}

rope<int> *rp[MAXN];
int a[MAXN];
int tot=0;
int main()
{
    ios::sync_with_stdio(0);
    int n,m;
    read(n);read(m);
    for(int i=1;i<=n;i++)
        read(a[i]);
    rp[0]=new rope<int>(a+1,a+n+1);
    for(int i=1;i<=m;i++)
    {
        rp[i]=new rope<int>(*rp[i-1]);
        char c=getchar();
        int x,y;
        if(c=='Q')
        {
            int l,r;
            int ans=0;
            read(l);read(r);read(x);
            for(int i=l;i<=r;i++)
                ans+=(rp[x]->at(i-1));
            printf("%d\n",ans);
        }
        else
        {
            read(x);read(y);
            rp[i]->replace(x-1,y);
        }
    }
    return 0;
}