http://acdreamoj.sinaapp.com/problem.php?id=1080
递推公式 自己没有弄出来 记住吧
#include<iostream> #include<stdio.h> #include<cstring> #include<algorithm> using namespace std; long long N; long long find( int sta,int end,long long val ) { if( end - sta <= 4 ) { for( long long i = sta; i <= end; i++ ) if( i*i-i+2 >= val ) return i; return end; } long long mid = ( sta + end )>>1; if( mid*mid-mid+2 >= val ) return find( sta,mid,val ); else return find( mid+1,end,val ); } int main( ) { int T,res;scanf("%d",&T); while( T-- ) { scanf("%I64d",&N); if( N == 1 ) res = 0; else res = find( 1,200000,N ); printf("%d\n",res); } return 0; }