P1338 末日的传说

说实话我真没思路

#include <iostream>
#include <cstdio>
using namespace std;
long long n,m,a[50002],num,last,fir;
int main(){
	scanf("%lld%lld",&n,&m);
	last=n;fir=1;
	for(int i=1;i<=n;i++){
		long long num=(long long)((n-i-1)*(n-i))/2;//全排列数量
		if(num>=m)
			a[fir++]=i;
		if(num<m) 	a[last--]=i,m=m-(last-fir+1);
		
	}
	for(int i=1;i<=n;i++)
		printf("%lld ",a[i]);
	return 0;
}//long long的问题,50,100。last和fir的问题。 虽然这个题解有点问题,但是
//解决了我按权给值加逆序对的问题。就是能用小的解决的绝不用大的,既然用大的说明不能用小的替代只好用他的最大价值 

 

上一篇:apache不解析php文档?提示需要下载(转)


下一篇:abc139_E