FZU1608 Huge Mission 線段樹lazy區間更新+求和

來源:互聯網
上載者:User

標籤:style   blog   os   2014   代碼   io   

就這破題目坑了我一個大晚上,直到今天一覺醒過來才搞定,原因之一:這題目的題意真的是太狗了,還不如直接看著案例猜來的快啊,

題意:給了你一些區間,x,y,第三個參數w是效率,代表這段時間他的單位時間效率,效率總和就是 (y-x)*w,然後有的時間段會被重複啊,比如前面給了1,4,1,後面又給了2,4,3他們為了是的時間段1,4的效率總和最大肯定是選擇  2,4區間的效率值選擇3,意思就是後面出現更好的情況就覆蓋前面的,問你總得最大效率和


當然這題目坑的原因還有一個就是以前學習線段樹 做的時候都是看著學長給的版子做的,完全沒有去看他人的版子,導致昨晚沒看懂題意的情況下,抱著看別人的代碼猜題意的心裡,結果弄錯了一些細節,因為別人的版子跟我的不一樣啊,哭瞎,昨晚先搞定了一種做法的,今天早上才搞定了自己錯誤的小細節,長腦子了,真的!



#include<iostream>#include<cstdio>#include<list>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<stack>#include<map>#include<vector>#include<cmath>#include<memory.h>#include<set>#include<cctype>#define ll long long#define LL __int64#define eps 1e-8#define inf 0xfffffff//const LL INF = 1LL<<61;using namespace std;//vector<pair<int,int> > G;//typedef pair<int,int > P;//vector<pair<int,int> > ::iterator iter;////map<ll,int >mp;//map<ll,int >::iterator p;const int N = 50000 + 5;typedef struct Node {int l,r;int num;};Node tree[N * 4];void build(int l,int r,int id) {tree[id].l = l;tree[id].r = r;tree[id].num = 0;if(l == r)return;int mid = (l + r)/2;build(l,mid,id<<1);build(mid+1,r,id<<1|1);}void Pushdown(int id) {if(tree[id].num > 0) {tree[id<<1].num = max(tree[id].num,tree[id<<1].num);tree[id<<1|1].num = max(tree[id].num,tree[id<<1|1].num);tree[id].num = 0;}}void update(int L,int R,int l,int r,int id,int val) {if(tree[id].num >= val)return;//剪枝,if(L <= l && R >= r) {if(tree[id].num < val)tree[id].num = val;return;}Pushdown(id);int mid = (l + r)/2;if(L <= mid)update(L,R,l,mid,id<<1,val);if(R > mid)update(L,R,mid+1,r,id<<1|1,val);//else {//update(l,mid,id<<1,val);//update(mid+1,r,id<<1|1,val);//}}int query(int l,int r,int id) {if( l == r)return tree[id].num;Pushdown(id);int mid = (l + r)/2;int ans1 = 0,ans2 = 0;if(l <= mid)ans1 = query(l,mid,id<<1);if(r > mid)ans2 = query(mid+1,r,id<<1|1);return ans1 + ans2;}int main() {int n,m;while(scanf("%d %d",&n,&m) == 2) {build(1,n,1);int q = m;int x,y,w;while(q--) {scanf("%d %d %d",&x,&y,&w);update(x+1,y,1,n,1,w);}int ans = query(1,n,1);printf("%d\n",ans);}return 0;}


#include<iostream>#include<cstdio>#include<list>#include<algorithm>#include<cstring>#include<string>#include<queue>#include<stack>#include<map>#include<vector>#include<cmath>#include<memory.h>#include<set>#include<cctype>#define ll long long#define LL __int64#define eps 1e-8#define inf 0xfffffff//const LL INF = 1LL<<61;using namespace std;//vector<pair<int,int> > G;//typedef pair<int,int > P;//vector<pair<int,int> > ::iterator iter;////map<ll,int >mp;//map<ll,int >::iterator p;const int N = 50000 + 5;typedef struct Node {int l,r;int num;};Node tree[N * 4];int ans;void build(int l,int r,int id) {tree[id].l = l;tree[id].r = r;tree[id].num = 0;if(l == r)return;int mid = (l + r)/2;build(l,mid,id<<1);build(mid+1,r,id<<1|1);}void Pushdown(int id) {if(tree[id].num > 0) {tree[id<<1].num = max(tree[id].num,tree[id<<1].num);tree[id<<1|1].num = max(tree[id].num,tree[id<<1|1].num);tree[id].num = 0;}}void update(int l,int r,int id,int val) {if(tree[id].num >= val)return;//剪枝,if(l <= tree[id].l && r >= tree[id].r) {if(tree[id].num < val)tree[id].num = val;return;}/*Pushdown(id);*/int mid = (tree[id].l + tree[id].r)/2;if(r <= mid)update(l,r,id<<1,val);else if(l > mid)update(l,r,id<<1|1,val);else {update(l,mid,id<<1,val);update(mid+1,r,id<<1|1,val);}}void query(int l,int r,int id) {if( l == r) {ans += tree[id].num;return;}Pushdown(id);int mid = (tree[id].l + tree[id].r)/2;if(r <= mid)query(l,r,id<<1);else if(l > mid)query(l,r,id<<1|1);else {query(l,mid,id<<1);query(mid+1,r,id<<1|1);}}int main() {int n,m;while(scanf("%d %d",&n,&m) == 2) {build(1,n,1);int q = m;int x,y,w;while(q--) {scanf("%d %d %d",&x,&y,&w);update(x+1,y,1,w);}ans = 0;query(1,n,1);printf("%d\n",ans);}return 0;}




聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在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.