View Code of Problem 3698

#include<iostream>
using namespace std;
long long dp[1000010];
int main(){
	long long ans;
	dp[1]=1;dp[2]=3;
	for(int i=1;i<1000010;i++){
		dp[i]=dp[i-1]+i;
	}
	int tc;
	cin>>tc;
//	cout<<dp[100000]<<endl;
	while(tc--){
		long long sum=0;
		long long ans=0;
		long long n;
		long long dui;
		long long res;
		long long h;
		long long l;
		scanf("%lld",&n);
		bool flag1=true;
		bool flag2=true;
		while(flag1){
			for(long long i=1;i<1000010;i++){
				sum+=dp[i];
				//cout<<sum<<endl;
				if(sum>=n){
					dui=i;
					res=n-sum+dp[i];
			//		cout<<res<<endl;
					flag1=false;
					break;
				}
			}
		}
		while(flag2){
			for(long long i=1;i<1000010;i++){
				if(dp[i]>=res){
				//	cout<<i<<endl;
				//	cout<<dp[i]<<endl;
				//	cout<<ans<<endl;
					h=i;
					res=dp[i]-res;
					l=i-res;
					flag2=false;
					break;
				}
			}
		}
		printf("%lld %lld %lld\n",dui,h,l);
	}
}

Double click to view unformatted code.


Back to problem 3698