zoukankan      html  css  js  c++  java
  • HDU6012:Lotus and Horticulture(扫描线)(前缀和)

    传送门

    题意

    给出n种植物的适宜培育温度区间[l,r],低于下限获值c,高于上限获值b,其他获值a

    分析

    首先考虑应该尝试选择哪些点:区间的左右端点、与区间左右端点距离0.50.5的点,这样就一定可以包括所有情况。 为了方便处理与区间左右端点距离0.50的点,只要将所有坐标扩大一倍,然后这些点就变成了“与区间左右端点距离1的点”了 考虑选出这些点后如何进行统计。显然先要将可以选的位置进行离散。假如我们选择的温度一开始是负无穷,这时答案是所有的c之和,考虑选择的温度不断升高,答案会如何变化。
    当达到一个区间的左端点,则加上a-c,当超过一个区间的右端点,加上a-b,每次更新最大值

    代码

    #include <cstdio>
    #include <cstring>
    #include <cstdlib>
    #include <ctime>
    #include <cmath>
    #include <iostream>
    #include <algorithm>
    #include <string>
    #include <set>
    #include <map>
    #include <queue>
    #include <stack>
    #include <vector>
    #include <bitset>
    using namespace std;
    
    #define ll long long
    int t,n,l,r,a,b,c;
    struct node
    {
        int loc,value;
        bool operator<(const node &p)const
        {
            return loc<p.loc;
        }
    }N[100100];
    
    int main()
    {
        for(scanf("%d",&t);t--;)
        {
            scanf("%d",&n);
            ll ans=0,ret=0;int cnt=0;
            for(int i=1;i<=n;++i)
            {
                scanf("%d%d%d%d%d",&l,&r,&a,&b,&c);
                ret+=c;
                N[++cnt]={l*2,a-c};N[++cnt]={r*2+1,b-a};
            }
            ans=ret;
            sort(N+1,N+1+cnt);int i;
            //printf("ret=%lld
    ",ret);
            //for(int i=1;i<=cnt;++i) printf("N[%d].loc=%d N[%d].value=%d
    ",i,N[i].loc,i,N[i].value);
            for(i=1;i<=cnt;)
            {
              ret+=N[i].value;i++;
              //printf("ret=%lld N[%d].value=%d
    ",ret,i,N[i].value);
              while(N[i].loc==N[i-1].loc) ret+=N[i].value,i++;
              //printf("ret=%lld N[%d].value=%d
    ",ret,i,N[i].value);
              ans=max(ans,ret);
              //printf("ret=%lld
    ",ret);
            }
            printf("%lld
    ",ans);
        }
    }
    
  • 相关阅读:
    lpc2103 rtc寄存器说明
    LPC21O3第一课:第一个实验,LED灯闪烁及ADS1.2的初步使用
    把FlvJoiner更新了一下
    Boost智能指针——weak_ptr
    买了一个USB无线网卡
    Boost的转换函数(二)
    把FlvDownloader更新了一下
    在C#中快速实现拖放操作
    Flv视频分割软件FlvSplitter发布
    用Apatch给Messenger去广告
  • 原文地址:https://www.cnblogs.com/chendl111/p/6343685.html
Copyright © 2011-2022 走看看