C. Glass Carving

來源:互聯網
上載者:User

標籤:set   multiset   

這道題主要是 運用set和multiset

題意就是給你一個w*h大小的長方體,每次進行一個操作,然後看每次操作完之後的剩餘的最大的矩形的面積

這個過程的結果在小長方形的玻璃片段。不移動新製造的玻璃片段。特別是,削減將每個片段的玻璃經過成更小的片段。

意思就是碎的也不移動,不管什麼時候長方體的位置都沒有變,變得只是這個長方體成為了片段

所以用set  記錄被切割的位置

用 multiset 記錄現在完整方塊的長度與寬度,並且每一次要把切割位置的兩邊的相距長度從這個集合裡面減掉


#include <set>#include <cstdio>#include <cstring>#include <algorithm>using namespace std;const int N = 2*1e5+5;typedef long long LL;LL w, h, n;set <LL> st[2];multiset <LL> mst[2];LL solve(int t, int val) {    set<LL>::const_iterator it = st[t].lower_bound(val);    LL v1 = *it, v2 = *(--it);    mst[t].erase(mst[t].find(v1-v2));    st[t].insert(val);    mst[t].insert(v1-val);    mst[t].insert(val-v2);    return (*mst[t].rbegin())*(*mst[t^1].rbegin());}int main() {    scanf("%I64d%I64d%I64d", &w, &h, &n);    st[0].insert(0), st[0].insert(h);    st[1].insert(0), st[1].insert(w);    mst[0].insert(h), mst[1].insert(w);    char ch;    int val;    for(int i = 1;i <= n; i++) {        getchar();        scanf("%c %d", &ch, &val);        printf("%I64d\n", ch == 'H' ? solve(0, val):solve(1, val));    }    return 0;}


C. Glass Carving

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.