【降雨】SCOI2007

ヘルプ新規参入者は、ネイティブタイトルACはWAWAWAを提出した降雨......

原題:

「最も雨の多いので、Y年にX。」:私たちはしばしばのようなものを言います これは、Xの意味がないよりY降雨年以上であり、かつ任意のための
Y <Z <X、Z X厳密に小さい年間降水量の年よりも。このような2002年、2003年と2005年のように、それぞれ降雨4920,5901,2832および3890で
、「2005 年は、2003年以来最大だった」が、2005年は2002年以来最大だった」と言うことができないと言うことができます「何年かで降雨によるものではない
知っている、と本当かもしれないか、正しくない可能性があり、いくつかの言うことを。

1 <= N <= 50000、1 <= M <= 10000、-10 ^ 9 <= YI <= 10 ^ 9、1 <= RI <= 10 ^ 9

 

この質問は難易思考を欠い、チャレンジが詳細に議論されていることを前のブログ

書き込みXinxinbaopengは、私が今、議論のポイントのいくつかを回避することができる方法を変換するどのように偉大な、単に表現の問題に対処すると思います

そして、......

 

 さて、これは私が練習していたものです

 

コード:

1の#include <iostreamの>
 2の#include <cstdioを>
 3  使用して 名前空間をSTD。
4  CONST  INT OO = 十億七5  INT nは、[ 51000 ]、B [ 51000 ] M。
6  INTの V [ 210000 ]。  BOOL U [ 210000を]。
7  ボイド gtsgmttr(int型のx、int型の L、int型R){
 8      であれば(L == R){
 9          V [X] = B [L]、U [X] = 10         リターン;
11      }
 12      INT MD =(L + R)>> 1 13      gtsgmttr(X << 1、L、MD)、gtsgmttr(X << 1 | 1、MD + 1 、R)。
14      V [X] = MAX(V [X << 1 ]、V [X << 1 | 1 ])。
15      U [X] =(U [X << 1 ] | U [X << 1 | 1 ] |([MD] + 1 = [MD +!1 ]))。
16  }
 17  INT QRV(int型のx、int型の L、INT R、INT QL、INT QR){
 18      であれば(L == QL && R == QR)   リターンV [X]。
19      INT MD =(L + R)>> 1 20      であれば(QL <= MD && QR> MD)
 21          リターン MAX(QRV(X << 1、L、MD、QL、MD)、QRV(X << 1 | 1、MD + 1、R、MD + 1 、QR ));
22      そう であれば(QR <= MD)   戻り QRV(X << 1 、L、MD、QL、QR)。
23      他の  リターン QRV(X << 1 | 1、MD + 1、R、QL、QR)。
24  }
 25  BOOL qru(int型のx、int型 L、INT R、int型 QL、INT QR){
 26      場合(L == QL && R == QR)を   返すUを[X]。
27      INT MD =(L + R)>> 1 28      であれば(QL <= MD && QR> MD)
 29          リターン(qru(X << 1、L、MD、QL、MD)| qru(X << 1 | 1、MD + 1、R、MD + 1、QR) |([MD] + 1!= [MD + 1 ]));
30       IF(QR <= MD)は   戻り QRU(X << 1 、L、MD、QL、QR)を、
 31は       リターン QRU(X << 1 | 1。、MD + 1 は、R、QL、QR);
 32  }
 33は、 INT bnrsch(INT X){   // デフォルト出力左側場合
34がなく     、INT、L = 0は、R = N - 、MD;
 35      // 。INT = L 1、= N-R&LT、MD;
 36      // 初期Lもし図1に示すように、左端点が最小値より少ないが、実際のリターンの右側であれば
37 [      ながら(L + 1 < R&LT){
 38である          MD =(L + R&LT)>> 1 ;
 39         ([MD] <X L:R)= MD。
40      }
 41      // リターン([L] = X && [R] = X -1:([L] == X L:!?R)); 
42      リターン [R] == X?R:L。
43  }
 44  INT メイン(){
 45      freopenは(" ddd.in "" R " 、STDIN)。
46      CIN >> N。
47      のためにINT iは= 1 ; iが<= N; ++ I)のscanf(" %D%D "、および[I]、&B [I])。
48      gtsgmttr(1、N)。
49      cinを>> メートル。
50      INTはL、R、X、Y。
51      一方、(M - > 0 ){
 52          のscanf(" %D%D "、およびX&Y)。
53          L = bnrsch(X)、R = bnrsch(Y)。
54          であれば(X> = Y + 1)のprintf(" 偽\ n " );
55          // 他([R] = Y || [L] = X!)のprintf( "多分\ n")であれば、
56          であれば([L] = X && [R] = Y!)のprintf(" 多分\ n " );
57          他の 場合(A [L]!= X || A [R&LT]!= Y){
 58              // 場合のみ、2つのエンドポイントが間違った判断をすることが可能であることを知っていることに注意してください
59              INT TMP =(1 + 1 <= R-(A [ R&LT] == Y)QRV(?11、N-、L + 1)、R-(A [R&LT] == Y):0 );
 60              IF(A [L] X = B [R&LT <? = TMP:B [L] <= TMP)のprintf(" falseに\ N- " );
 61である             (printfの" 多分\ N- " ;)
 62である         }
 63は、         他の IF(printf関数B [L])(B [R&LT]> " falseに\ N- " );
 64          {
 65             INT TMP =(L + 1 <= R- 1?QRV(11、N、L + 1、R- 1):0 );
66              もし(B [R] <= TMP)のprintf(" 偽\ n " );
67              他に あれば(qru(11、nは、L、R))のprintf(" 多分\ N " );
68                 のprintf(" 真\ N " );
69          }
 70      }
 71      リターン 0 72 }
コードの表示

おすすめ

転載: www.cnblogs.com/cdcq/p/12057643.html