題目大意:給你乙個$1$到$n$的排列,問是否存在一對數$a,b(1≤a,b≤n,a≠b)$滿足$a+b$為偶數且$(a+b)/2$在$a$和$b$之間。
資料範圍:$n≤3\times 10^$。
$xfz$智商$=-1$系列題目
考慮到此題並沒有問你存在多少對,而是是否存在,所以不要往統計有多少對上想!
我們考慮已經加入了前i個數,當前加入的數為x,下面我們需要判斷是否存在有一對$a$,$b$滿足$a+b=2x$的情況
令$m=min(n-x,x-1)$,顯然滿足a+b=2x的$(a,b)$的對數至多為$m$對
我們令$s1$表示前$i$個數,數值在區間$[x+1,x+m]$中的個數,$s2$表示前i個數,數值在$[x-m,x-1]$中的個數。
不難發現,若$s1
$s1>s2$的情況類似。
所以就可以用樹狀陣列來統計了。
時間複雜度:$o(n\log\ n)$。
1 #include2#define m 300005
3#define lowbit(x) ((x)&(-x))
4using
namespace
std;
5int a[m]=,n;
6void add(int x,int k)
7int sum(int x)
8int
main()
21if(ok) printf("
yes\n");
22else printf("
no\n");
23}24 }
hoj 1061 排列樹問題
problem c 排列樹問題 time limit 5000ms memory limit 65536k total submit 55 accepted 3 description 試設計乙個用回溯法搜尋排列空間樹的函式。該函式的引數包括結點可行性判定函式和上界函式等必要的函式,並將此函式用於解...
hdu 1716 排列2 排列組合
問題描述 ray又對數字的列產生了興趣 現有四張卡片,用這四張卡片能排列出很多不同的4位數,要求按從小到大的順序輸出這些4位數 input 每組資料佔一行,代表四張卡片上的數字 0 數字 9 如果四張卡片都是0,則輸入結束。output 對每組卡片按從小到大的順序輸出所有能由這四張卡片組成的4位數,...
197 排列序號
是 這道題採取暴力解法會超時,應當對於原陣列的每乙個位置找到其後有多少個數比它小,然後再相加這些數與對應的權的成績。class solution long long ans 1,fac 1,cc 1 for int i len 2 i 0 i ans fac cc c i return ans 注意...