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; }