sicily 8058. Matrix

#include<stdio.h>
int a[1005][1005];
int main()
{
    int n,m,q,_case;
    char c;
    int x,x1,x2,y1,y2,t;
    int ii,i,j;
    scanf("%d",&_case);
    while(_case--)
    {
        scanf("%d %d %d",&n,&m,&q);
        for(i=0;i<n;i++)
        for(j=0;j<m;j++)
        scanf("%d",&a[i][j]);
        for(i=0;i<q;i++)
        {
            getchar();
            scanf("%c",&c);
            if(c=='Q')
            {
                scanf("%d %d %d %d %d",&x,&x1,&x2,&y1,&y2);
                for(ii=x1;ii<=x2;ii++)
                {
                    if(a[ii][y1]<=x&&a[ii][y2]>=x)//必然的下一行
                    {
                        int front=y1;
                        int end=y2;
                        while(front<=end)
                        {
                            j=(front+end)/2;
                            if(a[ii][j]>x)end=j-1;
                            else if(a[ii][j]<x)front=j+1;
                            else goto Re;
                        }
                    }
                }
                if(ii>x2)printf("-1 -1\n");
                else
                {
                Re: while(j>0&&a[ii][j-1]==x)j--;//左边相同
                    printf("%d %d\n",ii,j);
                }
            }
            else
            {
                scanf("%d %d",&x1,&x);
                for(j=0;j<m;j++)
                a[x1][j]+=x;
                for(j=0;j<m;j++)
                {
                    //printf("##\n");
                    ii=x1+1;
                    while(ii<n&&a[ii][j]<=a[x1][j])ii++;
                    if(ii==x1+1)continue;//不是都换
                    t=a[ii-1][j];
                    a[ii-1][j]=a[x1][j];
                    a[x1][j]=t;
                }
            }
        }
    }
    return 0;
}                                 
原文地址:https://www.cnblogs.com/XDJjy/p/3052336.html