栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 面试经验 > 面试问答

zoj 3518 Unsafe Factor

面试问答 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

zoj 3518 Unsafe Factor

#include <stdio.h>#include <memory.h>#include <iostream>#include <algorithm>#include <vector>#include <map>using namespace std;struct Node{int l,r,Lmax,Rmax,Max;int cnt;}seg[2000000];int max(int x,int y){return x > y ? x : y;}map<int,int>M;int ink[500000+5];void build(int l,int r,int idx){seg[idx].l = l;seg[idx].r = r;seg[idx].Lmax = seg[idx].Rmax = seg[idx].Max = seg[idx].cnt = 0;if(l + 1 != r){build(l,(l+r)/2,2*idx);build((l+r)/2,r,2*idx+1);}return;}void Insert(int l,int r,int idx){if(seg[idx].l == l && seg[idx].r == r){seg[idx].cnt++;return;}int mid = (seg[idx].l + seg[idx].r)/2;if(r <= mid){Insert(l,r,2*idx);}else if(l >= mid){Insert(l,r,2*idx+1);}else{Insert(l,mid,2*idx);Insert(mid,r,2*idx+1);}}int getans(int idx){if(seg[idx].l + 1 != seg[idx].r){seg[2*idx].cnt += seg[idx].cnt;seg[2*idx+1].cnt += seg[idx].cnt;int ans = max(getans(2*idx),getans(2*idx+1));ans = max(ans,seg[2*idx].Rmax + seg[2*idx+1].Lmax);seg[idx].Max = ans;seg[idx].Lmax = seg[2*idx].Lmax;seg[idx].Rmax = seg[2*idx+1].Rmax;if(ink[seg[2*idx].r]-ink[seg[2*idx].l] == seg[2*idx].Lmax){seg[idx].Lmax += seg[2*idx+1].Lmax;}if(ink[seg[2*idx+1].r]-ink[seg[2*idx+1].l] == seg[2*idx+1].Rmax){seg[idx].Rmax += seg[2*idx].Rmax;}}else{if(seg[idx].cnt == 1){seg[idx].Lmax = seg[idx].Rmax = seg[idx].Max = ink[seg[idx].r] - ink[seg[idx].l];}else{seg[idx].Lmax = seg[idx].Rmax = seg[idx].Max = 0;}}return seg[idx].Max;}vector<int>E;vector<pair<int,int> >S;int main(){int i,j,k;int L,n1,n2;while(scanf("%d%d%d",&L,&n1,&n2) != EOF){E.clear();M.clear();S.clear();if(n1 + n2 == 0){printf("0n");continue;} for(i = 1;i <= n1 + n2;i++){int a,b;scanf("%d%d",&a,&b);b++;E.push_back(a);E.push_back(b);S.push_back(make_pair(a,b));}sort(E.begin(),E.end());int idx = 0;M[E[0]] = 0;ink[0] = E[0];idx++;for(i = 1;i < E.size();i++){if(E[i] != E[i-1]){M[E[i]] = idx;ink[idx++] = E[i];}}build(0,idx-1,1);for(i = 0;i < S.size();i++){int l = M[S[i].first],r = M[S[i].second];Insert(l,r,1);}printf("%dn",getans(1));}return 0;}
转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/378170.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号