NiukeアルゴリズムZhou Zhoulian 2-perfect square(プレイテーブル、lower_bound、upper_bound)

 

リンク:https
://ac.nowcoder.com/acm/contest/5203/Cソース:Niuke.com

制限時間:C / C ++ 1秒、2秒言語、他の
スペースの制限:C / C ++ 131072K、他の言語262144K
64ビットIOフォーマット:LLDの%

タイトルの説明

[l、r]の範囲の完全な正方形の数を複数回クエリする

整数xを完全な二乗として定義するのは、y * y = xであるような整数yが見つかる場合に限ります。

説明を入力してください:

最初の行の数字nは、クエリ数
の後のクエリ数示します。

出力の説明:

クエリごとに、答えを示す数値を出力します

例1

入力

5 
1  3 
1  4 
2  4 
4  4 
1  1000000000

アウトプット

1 
2 
1 
1 
31622

備考:

n <= 100000
0 <= l <= r <= 1000000000

 

 

最初の前処理[0,1000000000] 合計のすべての完全な正方形31 623 番目(0 2〜31622 2)。

二分探索はl以上   の最初の完全な正方形の位置インデックスを見つけます。二分探索はrより大きい最初の完全な正方形の位置インデックスを見つけます。それを引くことが答えです。 

それぞれlower_bound()とupper_bound()を使用できます

 

1 #include <bits / stdc ++。h>
 2 typedef long  long LL;
3  #define pb push_back
 4  const  int INF = 0x3f3f3f3f ;
5  const  double eps = 1e- 8 ;
6  const  int mod = 1e9 + 7 ;
7  const  int maxn = 1e5 + 10 ;
8  名前空間std を使用 9 10 vector < int > vt;
11 12 整数 
 
 main()
 13  {
 14      #ifdef DEBUG
 15      freopen(" sample.txt "" r "、stdin); // freopen( "data.out"、 "w"、stdout); 
16      #endif 
17      
18      forint i = 0 ; i * i <= 1000000000 ; i ++ 19      vt.pb(i * i);
20  
21      int T;
22      scanf(" %d "、&T);
23の     (T-- 24     {
 25          int l、r;
26          scanf(" %d%d "、&​​l、&r);
27          int pos1 = lower_bound(vt.begin()、vt.end()、l)-vt.begin();
28          int pos2 = upper_bound(vt.begin()、vt.end()、r)-vt.begin();
29          printf(" %d \ n "、pos2- pos1);
30      }
 31      
32      return  0 ;
33 }

 

 

 

 

-

おすすめ

転載: www.cnblogs.com/jiamian/p/12758151.html