是說有n頭牛,它們身高不一但是排成了一隊,從左到右編號為1到n,現在告訴你從第二號開始前面的那些牛中身高小於它的個數,一共有n-1個數。然後求出它們按照身高來排序的話從低到高編號會是多少。首先我們需要從它給的資料逆序來進行處理,為什麼,比如倒數第乙個資料是0的話,說明前面沒有比它矮的牛,那麼它的編號就是1,然後倒數第二個是2的話,就是說前面有兩個比它矮,因為1號已經有了,所以他就是4號,後面以此類推。
根據這個思路我們就可以進行模擬(或者說暴力來進行解決),當然也可以使用線段樹或則樹狀陣列來進行優化。
這裡還有一種演算法,是基於氣泡排序的,是hxr大哥想到的,真是tql。
#include#include#includeusing namespace std;
const int maxn=8e5+7;
int a[maxn], vis[maxn];
int n;
int main()
int t;
for(int i=n; i>=1; i--)
a[i]=t;
vis[t]=1;
} for(int i=1; i<=n; i++)
return 0;
}
氣泡排序法
#include#include#include#includeusing namespace std;
const int maxn=8e3+7;
int a[maxn], id[maxn];
int num[maxn];
int n;
int main()
for(int j=1; j=a[i+1])
} }for(int i=1; i<=n; i++)
num[id[i]]=i;
for(int i=1; i<=n; i++)
return 0;
}
poj 2182 單點修改
題意 有n頭牛,標號從1到n,現在牛排成乙個佇列,知道每個牛的前面比自己標號小的牛的數量,輸出每個牛的標號。題解 給出的序列的最後乙個數字是可以推出的,然後把這個數字拿走,又能知道前面有幾個數字,和之前做過的有幾個空位乙個道理,維護線段樹區間解決。include include include us...
poj 2182 樹狀陣列
這題對於o n 2 的演算法有很多,我這隨便貼乙個爛的,跑了375ms。include include using namespace std int mat 8008 int main for i 0 i printf d n mat i return0 view code 還是來看樹狀陣列的解法...
POJ 2182 Lost Cows(樹狀陣列)
用c i 來表示 i lowbit i 1,i 區間內有多少個位置,接著二分查詢num i 1的位置,接著在相關區間內減去乙個位置 這步尤為重要,關乎前面能否查詢到正確的位置 main.cpp richard created by 邵金傑 on 16 8 20.include include inc...