zoukankan      html  css  js  c++  java
  • codeforces1029C

                传送门::https://codeforces.com/contest/1029/problem/C

      题意::给你n个区间,给你一次操作删除一个区间,求剩余区间交集的最大范围;

     分析 :直接线段树 复杂度 O(n*4*log n),维护左端点的最大值 右端点的最小值

     1 #include<bits/stdc++.h>
     2 #define ull unsigned long long
     3 #define ll long long
     4 const int inf=1e9+7;
     5 const int maxn=3e5+5;
     6 using namespace std;
     7 
     8 int Max[maxn*4],Min[maxn*4];
     9 int a[maxn],b[maxn];
    10 
    11 void build(int l,int r,int rt)
    12 {
    13     if(l==r){
    14         Max[rt]=a[l];
    15         Min[rt]=b[l];
    16         return ;
    17     }
    18     int mid=(l+r)>>1;
    19     build(l,mid,2*rt);
    20     build(mid+1,r,2*rt+1);
    21     Max[rt]=max(Max[2*rt],Max[2*rt+1]);
    22     Min[rt]=min(Min[2*rt],Min[2*rt+1]);
    23 }
    24 void update1(int target,int l,int r,int rt,int add)
    25 {
    26     if(l==r)
    27     {
    28         Max[rt]=add;
    29         return ;
    30     }
    31     int mid=(l+r)>>1;
    32     if(target<=mid){
    33         update1(target,l,mid,2*rt,add);
    34     }
    35     if(target>mid){
    36         update1(target,mid+1,r,2*rt+1,add);
    37     }
    38     Max[rt]=max(Max[2*rt],Max[2*rt+1]);
    39     Min[rt]=min(Min[2*rt],Min[2*rt+1]);
    40 }
    41 void update2(int target,int l,int r,int rt,int add)
    42 {
    43     if(l==r){
    44         Min[rt]=add;
    45         return ;
    46     }
    47     int mid=(l+r)>>1;
    48     if(target<=mid){
    49         update2(target,l,mid,2*rt,add);
    50     }
    51     if(target>mid){
    52         update2(target,mid+1,r,2*rt+1,add);
    53     }
    54     Max[rt]=max(Max[2*rt],Max[2*rt+1]);
    55     Min[rt]=min(Min[2*rt],Min[2*rt+1]);
    56 }
    57 
    58 int main()
    59 {
    60     int n;
    61     scanf("%d",&n);
    62     for(int i=1;i<=n;i++){
    63         scanf("%d%d",&a[i],&b[i]);
    64     }
    65     build(1,n,1);
    66     int maxnn=0;
    67     for(int i=1;i<=n;i++)
    68     {
    69         update1(i,1,n,1,0);
    70         update2(i,1,n,1,1e9+77);
    71         maxnn=max(maxnn,Min[1]-Max[1]);
    72         update1(i,1,n,1,a[i]);
    73         update2(i,1,n,1,b[i]);
    74     }
    75     printf("%d
    ",maxnn);
    76     return 0;
    77 }
    View Code
    纵使单枪匹马,也要勇闯天涯
  • 相关阅读:
    修改windows系统cookie、favorites、desktop等的位置到非系统盘
    第三章 多维随机变量及其分布4
    谈谈Ironpython的应用
    提问的智慧
    第三章 多维随机变量及其分布2
    用C#做 UG NX 二次开发 / NX Secondary Dev. with C#
    第六章 样本与抽样分布
    ufun视频教程(合) / Movie of UFUN
    第四章 随机变量的数字特征2
    第一章 概率论的基本概论
  • 原文地址:https://www.cnblogs.com/sj-gank/p/11748126.html
Copyright © 2011-2022 走看看