Lost Cows POJ 2182 思維 巧法

2022-03-16 22:43:03 字數 992 閱讀 7141

是說有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...