记录编号 155409 评测结果 AAAAAAAAAA
题目名称 矩阵 最终得分 100
用户昵称 Gravatar天一阁 是否通过 通过
代码语言 C++ 运行时间 2.740 s
提交时间 2015-03-28 20:36:16 内存使用 59.42 MiB
显示代码纯文本
#include<cstdio>
char co[50000000],*po=co;
int tim,a[1001][1001],b[1000001],c[1000001];
inline short getint(short &x){
	short ch,gg=0;
	while(ch=getchar(),ch<40&&ch!=EOF);
	if(ch==EOF) return 0;
	else if(ch!=45) x=ch-48;
	else gg=1,x=0;
	while((ch=getchar())>47) x=(x<<1)+(x<<3)+ch-48;
	if(gg) x=-x;
	return x;
}
inline int getint(int &x){
	short ch,gg=0;
	while(ch=getchar(),ch<40&&ch!=EOF);
	if(ch==EOF) return 0;
	else if(ch!=45) x=ch-48;
	else gg=1,x=0;
	while((ch=getchar())>47) x=(x<<1)+(x<<3)+ch-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(const 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);
	short n,m;
	int d[1002],cnt;
	while(getint(n)){
		getint(m),cnt=0,tim=1;
		short j;
		for(short i=1;i<=n;i++)
			for(j=1;j<=m;j++)
				b[++cnt]=getint(a[i][j]),c[cnt]=1001;
		sort(b,1,cnt);
		for(short 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];
		short i;
		for(i=1;i<=n;i++){
			cnt=0;
			for(j=1;j<=m;j++){
				a[i][j]=lowerbound(a[i][j]);
				if(c[a[i][j]]<=j) out(cnt+=d[j]);
				else d[c[a[i][j]]]--,c[a[i][j]]=j,out(cnt+=++d[j]);
				*po++=' ';
			}
			*po++='\n';
		}
	}
	fwrite(co,1,po-co,stdout);
}