zoukankan      html  css  js  c++  java
  • 2015轻院校赛 矩阵

    ---恢复内容开始---

    http://acm.zznu.edu.cn/problem.php?id=1967

    题目大意  :   矩阵A [i][j]=i+j;

    Q代表查询   求任意一个矩阵的和

    M代表更换   把原来的换成现在这个数

    分析: 如果暴搜肯定不行  就想到一种好方法   把他们的和保存到一个数组   事先打好一个表  后面更新的点一一的记录下来  

    求和的时候就只需把在这个求得小长方形里的更新的值加到一起  最后在加上原来矩阵的和就可以

    #include <iostream>
    #include <cstring>
    #include <algorithm>
    #include <queue>
    #include <cstdio>
    #include <cstdlib>
    #include <cctype>
    #include <cmath>
    
    using namespace std;
    #define memset(a,b) memset(a,b,sizeof(a))
    #define N 1100
    
    struct node
    {
        int x,y,c;
    }a[N];
    int sum[N][N];
    
    
    void Inn()
    {
        for(int i=1;i<=N;i++)
        {
            for(int j=1;j<=N;j++)
            {
                sum[i][j]=sum[i-1][j]+sum[i][j-1]+i+j-sum[i-1][j-1];
            }
        }
    }
    int main()
    {
        int T,n,m,Q;
        char str[5];
        scanf("%d",&T);
    
        Inn();
        while(T--)
        {
            scanf("%d %d %d",&n,&m,&Q);
            int k=0;
            while(Q--)
            {
    
                int x1,x2,y1,y2,h;
                scanf("%s",str);
                if(str[0]=='Q')
                {
                    int ans=0;
                    scanf("%d %d %d %d",&x1,&y1,&x2,&y2);
                    for(int i=0;i<k;i++)
                    {
                        if(a[i].x>=x1 && a[i].x<=x2 && a[i].y>=y1 && a[i].y<=y2)
                        {
                            ans=ans+a[i].c-(a[i].x+a[i].y);
                        }
                    }
                    ans=ans+sum[x2][y2]-sum[x1-1][y2]-sum[x2][y1-1]+sum[x1-1][y1-1];
                    printf("%d
    ",ans);
                }
                else
                {
                    int f=0;
                    scanf("%d %d %d",&x1,&y1,&h);
                    for(int i=0;i<k;i++)
                    {
                        if(x1==a[i].x && y1==a[i].y)
                        {
                            a[i].c=h;
                            f=1;
                            break;
                        }
                    }
                    if(f==0)
                        a[k].x=x1,
                        a[k].y=y1,
                        a[k++].c=h;
                }
            }
        }
        return 0;
    }

    ---恢复内容结束---

  • 相关阅读:
    浅谈 iOS 事件的传递和响应过程
    iOS 之渐变颜色
    系统enum的一些样式
    Storyboard操作的2个小技巧
    iOS 动画初步
    iOS之Runtime初应用
    Block使有注意点
    使用ios系统自带分享
    IOS原生地图与高德地图
    反向传值实例
  • 原文地址:https://www.cnblogs.com/linliu/p/5392680.html
Copyright © 2011-2022 走看看