質問の意味:
ポケットは、キャンディの異なるサイズを置くことができ、お菓子も異なるサイズで来ることができます。キャンディのKはるかに小さい音量でクエリプロセス
入力T、入力操作に続いてT-基であり、m
MとX線入力オペアンプ
OPは、Xサイズキャンディに、1に等しい場合
opが2倍に等しい場合、キャンディxの大きさにそれを取ります
OPは、最初のクエリは、小さなキャンディーX 3は、に等しく、答えを出力します
アイデア:+バイナリツリーアレイ(ゲーム時間)
ここでは、最適化さフェンウィックツリー文言を書き込みます
1の#include <iostreamの> 2の#include <CStringの> 3の#include <cstdioを> 4の#include <cmath> 5の#include <アルゴリズム> 6の#include < ストリング > 7 の#define MEM(A、B)のmemset(B 、はsizeof()) 8 の#define INF 0x3f3f3f3f 9 の#define LL長い長い 10 の#define lowbit(b)のB&( - B) 11 使用 名前空間STDを、 12 CONST INT MAXN = 1E5 + 10 。 13 INT C [MAXN]、F [ 20]; 14インラインint型リード(){ 15 CHAR CH = GETCHAR()。INT X = 0、F = 1 。 16 一方(CH < ' 0 ' || CH> ' 9 ' ){ 17 であれば(CH == ' - ')、F = - 1 。 18 CH = GETCHAR()。 19 } ながら(' 0 ' <= CH && CH <= ' 9 ' ){ 20 X = X * 10 + CH - ' 0 ' 。 21 CH = GETCHAR()。 22 } 戻り X * F。 23 } 24インラインボイドアップデータ(int型のx、int型Y){ 25 のために(INT ; I <= MAXN I + = I = X {lowbit(I)) 26 C [I] + = Y。 27 } 28 } 29 のint main()の 30 { 31 のint T、I、F [0 ] = 1 ; 32 のためには、(iは= 1 ; I <= 17 ; I ++ ){ 33 F [I] = F [I- 1 ] * 2 。 34 } 35 、T = ()を読み込みます。 36 一方(t-- ){ 37 のために(私は= 0 ; I <MAXN; I ++){C [I] = 0 ;} 38 int型M。 39 、M = ()を読み出します。 40 のために(私は= 0 ; I <M、I ++ ){ 41 のint OP、X。 42 OP =()を読み出す; X = )(読み取ります。 43 であれば(OP == 1 ){ 44 アップデータ(X、1 )。 45 } 46 そう であれば(OP == 2 ){ 47 アップデータ(X - 1 )。 48 } 49 他{ 50 INT ANS = 0、和= 0 、J。 51 のために(J = 17 ; J> = 0 ; j-- ){ 52 ANS + =J F]; 53 であれば(ANS> = MAXN ||和+ C [ANS]> = X){ 54 ans- = [J] F。 55 } 56 他{ 57 和+ = C [ANS]。 58 } 59 } 60 のprintf(" %D \ n "、ANS + 1 )。 61 } 62 } 63 } 64 リターン 0 。 65 } 66 / * 67 2 68 3 69 1 2 70 1 2 71 3 1 72 4 73 1 2 74 1 3 75 2 2 76 3 1 77 * /