记录编号 155420 评测结果 AAAAAAAAAA
题目名称 矩阵 最终得分 100
用户昵称 Gravatarnew ioer 是否通过 通过
代码语言 C++ 运行时间 2.520 s
提交时间 2015-03-28 21:18:09 内存使用 39.40 MiB
显示代码纯文本
#include<cstdio>
char ci[15000000],co[14000000],*pi=ci,*po=co;
int tim,a[1001][1001],b[1000001],c[1000001];
inline short getint(short &x){
	short gg=0;
	while(*pi<'!'&&*pi>0) pi++;
	if(*pi<0) return 0;
	else if(*pi!=45) x=*pi-48;
	else gg=1,x=0;pi++;
	while(*pi>47) x=(x<<3)+(x<<1)+*pi++-48;
	if(gg) x=-x;
	return x;
}
inline int getint(int &x){
	short gg=0;
	while(*pi<'!'&&*pi>0) pi++;
	if(*pi<0) return 0;
	else if(*pi!=45) x=*pi-48;
	else gg=1,x=0;pi++;
	while(*pi>47) x=(x<<3)+(x<<1)+*pi++-48;
	if(gg) x=-x;
	return x;
}
inline void out(int x){
	static short f=0;
	static char p[10];
	while(x) p[++f]=x%10+'0',x/=10;
	while(f) *po++=p[f--];
}
inline int lowerbound(int x){
	int l=1,r=tim,mid;
	while(l<=r){
		mid=(l+r)>>1;
		if(b[mid]<x) l=mid+1;
		else r=mid-1;
	}
	return l;
}
inline void sort(int* a,const int &l,const int &r){
    if(l>=r) return;
    static int x,i,j;
    i=l,j=r,x=a[i];
    while(i<j){
        while(x<a[j]&&j>i) j--;
        if(i<j) a[i]=a[j],i++;
        while(x>a[i]&&j>i) i++;
        if(i<j) a[j]=a[i],j--;
    }
    a[i]=x,sort(a,l,i-1),sort(a,i+1,r);
}
int main(){
	freopen("matrixa.in","r",stdin);
	freopen("matrixa.out","w",stdout);
	int tmp=fread(pi,1,15000000,stdin),cnt;
	short n,m,d[1002];
	ci[tmp]=-1;
	while(getint(n)){
		getint(m),cnt=0,tim=1;
		for(int i=1;i<=n;i++)
			for(int j=1;j<=m;j++)
				b[++cnt]=getint(a[i][j]),c[cnt]=1001;
		sort(b,1,cnt);
		for(int i=1;i<=m;i++) d[i]=0;
		for(int i=2;i<=cnt;i++) if(b[i]!=b[i-1]) b[++tim]=b[i];
		for(int i=1;i<=n;i++){
			cnt=0;
			for(int j=1;j<=m;j++){
				a[i][j]=lowerbound(a[i][j]);
				if(c[a[i][j]]<=j) out(cnt+=d[j]),*po++=' ';
				else d[c[a[i][j]]]--,c[a[i][j]]=j,out(cnt+=++d[j]),*po++=' ';
			}
			*po++='\n';
		}
	}
	fwrite(co,1,po-co,stdout);
}