傳送門
思路:權值樹狀陣列。
考慮列舉每個位置作為裁判對答案的貢獻。
顯然有兩種情況:
1. a[
l]
i] #include #include using namespace std; typedef long long ll; const int n= 2e4+ 5,m= 1e5+ 5,inf= 0x3f3f3f3f ,mod= 1e9+7; #define mst(a) memset(a,0,sizeof a) #define lx x<<1 #define rx x<<1|1 #define reg register #define pii pair #define fi first #define se second int t,n,a[n] ,tr[m] ;int l_up[n] ,l_low[n] ,r_up[n] ,r_low[n] ;#define lowbit(x) x&(-x) void update (int x, int k) }ll query (int x) return ans; }int main() for( int i= 1;i<= 1e5;i++ ) tr[i]=0 ; ll ans=0; for( int i=n;i>= 1;i-- )for (int i= 1;i<= 1e5;i++ ) tr[i]=0 ;printf ("%lld\n" ,ans);} return0; } uva1428 ping pong 樹狀陣列 題目鏈結 題目大意 有n個人,每個人都有乙個技能值ai,現在要開展桌球比賽,要求要有兩個選手和乙個裁判,要求裁判需要在兩名選手的中間而且技能值也是在兩名選手的中間,問可以開展多少場比賽。解題思路 對於第i個選手當裁判的話,設它前面位置的選手有ci個技能值... 題意 一條街道上有n個選手,他們要打桌球賽,每個人有乙個自己的skill rank,且是n個不同的數。每場比賽需要乙個裁判,要求這個裁判的skill rank不能高於也不能低於這兩個選手,且在街上住的位置必須在兩個選手之間。問可以組織多少場比賽。開始想到了可以用樹狀陣列處理每個人前面有多少sr sk... 取low min a i 1 i n up max a i 1 i n 那麼區間就是,那麼只要統計出當前a i 左邊有多少比他小的,右邊有多少比他小的即可,因為給出的序列是有順序的,所以在加入需要加入乙個統計乙個,如果先全部加入了,那麼則會導致統計結果變大。include include inclu...UVA1428 Ping pong 樹狀陣列
uva 1428 Ping pong (樹狀陣列)
UVA 1428 Ping Pong 樹狀陣列