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

    http://acm.hdu.edu.cn/showproblem.php?pid=1892

    二维树状数组,很裸。。。

    View Code
    #include <iostream>
    #include <algorithm> 
    #include <cstring>
    using namespace std;
    const int MAX=1010;
    int weight[MAX][MAX],tree[MAX][MAX];
    int lowbit(int i){
        return i&(-i);
    }
    void update(int x,int y,int val)
    {
        for(int i=x;i<MAX;i+=lowbit(i))
            for(int j=y;j<MAX;j+=lowbit(j))
                tree[i][j]+=val;
    }
    int Sum(int x,int y)
    {
        int sum=0;
        for(int i=x;i>0;i-=lowbit(i))
            for(int j=y;j>0;j-=lowbit(j))
                sum+=tree[i][j];
        return sum;
    }
    int main()
    {
        int T;
        scanf("%d",&T);
        for(int cas=1;cas<=T;cas++)
        {
            memset(tree,0,sizeof(tree));
            for(int i=1;i<MAX;i++)
                for(int j=1;j<MAX;j++)
                {
                    update(i,j,1);
                    weight[i][j]=1;
                }
            //weight[0][0]=0;
            int n;
            scanf("%d",&n);
            printf("Case %d:\n",cas);
            while(n--)
            {
                char op[2];
                scanf("%s",op);
                int x1,y1,x2,y2;
                int n1;
                switch(op[0])
                {
                    case 'S':
                    {
                        scanf("%d%d%d%d",&x1,&y1,&x2,&y2);
                        x1++;y1++;x2++;y2++;
                        int minx,miny,maxx,maxy;
                        minx=min(x1,x2);
                        miny=min(y1,y2);
                        maxx=max(x1,x2);
                        maxy=max(y1,y2);
                        printf("%d\n",Sum(maxx,maxy)-Sum(minx-1,maxy)-Sum(maxx,miny-1)+Sum(minx-1,miny-1));    
                        break;
                    }
                    case 'A':
                    {
                        scanf("%d%d%d",&x1,&y1,&n1);
                        x1++;y1++;
                        update(x1,y1,n1);
                        weight[x1][y1]+=n1;
                        break;
                    }
                    case 'D':
                    {
                        scanf("%d%d%d",&x1,&y1,&n1);
                        x1++;y1++;
                        if(weight[x1][y1]<=n1)
                        {
                            update(x1,y1,-weight[x1][y1]);
                            weight[x1][y1]=0;
                        }
                        else
                        {
                            update(x1,y1,-n1);
                            weight[x1][y1]-=n1;
                        }
                        break;
                    }
                    case 'M':
                    {
                        scanf("%d%d%d%d%d",&x1,&y1,&x2,&y2,&n1);
                        x1++;y1++;x2++;y2++;
                        if(weight[x1][y1]<=n1)
                        {
                            update(x1,y1,-weight[x1][y1]);
                            update(x2,y2,weight[x1][y1]);
                            weight[x2][y2]+=weight[x1][y1];
                            weight[x1][y1]=0;
                        }
                        else
                        {
                            update(x1,y1,-n1);
                            update(x2,y2,n1);
                            weight[x1][y1]-=n1;
                            weight[x2][y2]+=n1;
                        }
                        break;
                    }
                }
            }
        }
        return 0;
    }
  • 相关阅读:
    客户机(单线程 和多线程都可以用 主要是看服务器是单线程的还是多线程的)
    获得URl信息
    获取地址
    定时器的使用以及日期的学习
    生产者和消费者
    线程join
    线程的协作
    文件的解压与压缩
    文件的分割与合并
    以各种方式读写文件
  • 原文地址:https://www.cnblogs.com/xiaohongmao/p/2513911.html
Copyright © 2011-2022 走看看