zoukankan      html  css  js  c++  java
  • HDU 1892 See you~

        最裸的二维树状数组,但是因为内存太大(c[1010][1010]),好像不能运行,结果蒙着写,写了好久。。

    代码:

    #include <iostream>
    #include <cstdio>
    #include <cstring>
    #include <cmath>
    #include <algorithm>
    using namespace std;
    #define N 1010
    
    int c[N][N];
    
    int lowbit(int x)
    {
        return x&(-x);
    }
    
    void modify(int x,int y,int val)
    {
        for(int i=x;i<=N;i+=lowbit(i))
        {
            for(int j=y;j<=N;j+=lowbit(j))
            {
                c[i][j] += val;
            }
        }
    }
    
    int sum(int x,int y)
    {
        int res = 0;
        for(int i=x;i>0;i-=lowbit(i))
        {
            for(int j=y;j>0;j-=lowbit(j))
            {
                res += c[i][j];
            }
        }
        return res;
    }
    
    int GetIt(int x1,int y1,int x2,int y2)
    {
        int maxx = max(x1,x2);
        int maxy = max(y1,y2);
        int minx = min(x1,x2);
        int miny = min(y1,y2);
        return sum(maxx+1,maxy+1)-sum(minx,maxy+1)-sum(maxx+1,miny)+sum(minx,miny);
    }
    
    int main()
    {
        int t,q,i,j;
        int x1,x2,y1,y2,n1;
        char ss[4];
        int cs = 1;
        scanf("%d",&t);
        while(t--)
        {
            printf("Case %d:
    ",cs++);
            scanf("%d",&q);
            memset(c,0,sizeof(c));
            for(i=1;i<N;i++)
            {
                for(j=1;j<N;j++)
                {
                    modify(i,j,1);
                }
            }
            while(q--)
            {
                scanf("%s",ss);
                if(ss[0] == 'S')
                {
                    scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                    printf("%d
    ",GetIt(x1,y1,x2,y2));
                }
                else if(ss[0] == 'A')
                {
                    scanf("%d%d%d",&x1,&y1,&n1);
                    modify(x1+1,y1+1,n1);
                }
                else if(ss[0] == 'D')
                {
                    scanf("%d%d%d",&x1,&y1,&n1);
                    int val = sum(x1+1,y1+1)-sum(x1,y1+1)-sum(x1+1,y1)+sum(x1,y1);
                    int Min = min(n1,val);
                    modify(x1+1,y1+1,-Min);
                }
                else if(ss[0] == 'M')
                {
                    scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&n1);
                    int val = sum(x1+1,y1+1)-sum(x1,y1+1)-sum(x1+1,y1)+sum(x1,y1);
                    int Min = min(n1,val);
                    modify(x1+1,y1+1,-Min);
                    modify(x2+1,y2+1,Min);
                }
            }
        }
        return 0;
    }
    View Code
  • 相关阅读:
    Zepto
    html5新增表单控件和表单属性
    初识html5
    H5 css3布局
    H5 css3背景透明度
    H5 css3特效
    H5 css3渐变
    H5css3的文本属性
    一个类有两个类别中,在类别里实现了相同的方法结果?
    size_t 理解误区
  • 原文地址:https://www.cnblogs.com/whatbeg/p/3533192.html
Copyright © 2011-2022 走看看