日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 人文社科 > 生活经验 >内容正文

生活经验

BZOJ 4059: [Cerc2012]Non-boring sequences ( )

發布時間:2023/11/27 生活经验 38 豆豆
生活随笔 收集整理的這篇文章主要介紹了 BZOJ 4059: [Cerc2012]Non-boring sequences ( ) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

要快速在一段子序列中判斷一個元素是否只出現一次 , 我們可以預處理出每個元素左邊和右邊最近的相同元素的位置 , 這樣就可以 O( 1 ) 判斷.

考慮一段序列 [ l , r ] , 假如我們找到了序列中唯一元素的位置 p , 那我們只需檢查 [ l , p - 1 ] & [ p + 1 , r ] 是否 non-boring 即可 .?

如何檢查 序列 [ l , r ] 呢 ? 假如從左往右或者從右往左找 , 最壞情況下是 O( n ) , 總時間復雜度會變成 O( n2 ) ; 假如我們從兩邊往中間找 , 那最壞情況是唯一元素在中間 , ?單次是 O( n ) , 但是現在劃分出來的遞歸處理的左右兩部分都是原序列長度的一半 , 這樣總時間復雜度就是 O( nlogn ) 了

------------------------------------------------------------------------------------------------------

#include<cstdio>#include<cstring>#include<algorithm>#include<iostream>#include<map>#define rep( i , n ) for( int i = 0 ; i < n ; ++i )#define clr( x , c ) memset( x , c , sizeof( x ) )using namespace std;const int maxn = 200000 + 5;int seq[ maxn ] , L[ maxn ] , R[ maxn ] , n;map< int , int > S;#define UNIQUE( x ) ( L[ x ] < l && R[ x ] > r )bool check( int l , int r ) {if( l >= r ) return true;int t[ 2 ] = { l , r };for( int p = 0 ; t[ 0 ] <= t[ 1 ] ; ( p ^= 1 ) ? t[ 0 ]++ : t[ 1 ]-- )if( UNIQUE( t[ p ] ) ) ? ?return check( l , t[ p ] - 1 ?) && check( t[ p ] + 1 , r );return false;}int main() {freopen( "test.in" , "r" , stdin );int t;cin >> t;while( t-- ) {scanf( "%d" , &n );rep( i , n )L[ i ] = -1 , R[ i ] = n;S.clear();rep( i , n ) { ? ?scanf( "%d" , seq + i ); ? ?if( S.find( seq[ i ] ) != S.end() ) ? ? ? ?L[ i ] = S[ seq[ i ] ]; ? ?S[ seq[ i ] ] = i;}S.clear();for( int i = n - 1 ; i >= 0 ; i-- ) { ? ?if( S.find( seq[ i ] ) != S.end() )R[ i ] = S[ seq[ i ] ]; ? ?S[ seq[ i ] ] = i;}printf( check( 0 , n - 1 ) ? "non-boring\n" : "boring\n" );}return 0;}

?

------------------------------------------------------------------------------------------------------?

?

4059: [Cerc2012]Non-boring sequences

Time Limit:?10 Sec??Memory Limit:?128 MB
Submit:?300??Solved:?105
[Submit][Status][Discuss]

Description

我們害怕把這道題題面搞得太無聊了,所以我們決定讓這題超短。一個序列被稱為是不無聊的,僅當它的每個連續子序列存在一個獨一無二的數字,即每個子序列里至少存在一個數字只出現一次。給定一個整數序列,請你判斷它是不是不無聊的。

Input

第一行一個正整數T,表示有T組數據。每組數據第一行一個正整數n,表示序列的長度,1 <= n <= 200000。接下來一行n個不超過10^9的非負整數,表示這個序列。

Output

對于每組數據輸出一行,輸出"non-boring"表示這個序列不無聊,輸出"boring"表示這個序列無聊。

Sample Input

4
5
1 2 3 4 5
5
1 1 1 1 1
5
1 2 3 2 1
5
1 1 2 1 1

Sample Output

non-boring
boring
non-boring
boring

HINT

Source

鳴謝Tjz

?

轉載于:https://www.cnblogs.com/JSZX11556/p/4632774.html

總結

以上是生活随笔為你收集整理的BZOJ 4059: [Cerc2012]Non-boring sequences ( )的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。