• Lotus and Horticulture


    Lotus and Horticulture

    Accepts: 91
    Submissions: 641
    Time Limit: 4000/2000 MS (Java/Others)
    Memory Limit: 262144/262144 K (Java/Others)

    这几天Lotus对培养盆栽很感兴趣,于是她想搭建一个温室来满足她的研究欲望。 Lotus将所有的nnn株盆栽都放在新建的温室里,所以所有盆栽都处于完全相同的环境中。 每一株盆栽都有一个最佳生长温度区间[l,r][l,r][l,r],在这个范围的温度下生长会生长得最好,但是不一定会提供最佳的研究价值(Lotus认为研究发育不良的盆栽也是很有研究价值的)。 Lotus进行了若干次试验,发现若第iii株盆栽的生长温度适宜,可以提供aia_ia
    思路:区间的左右端点、与区间左右端点距离0.50.50.5的点,这样就一定可以包括所有情况。 为了方便处理与区间左右端点距离0.50.50.5的点,只要将所有坐标扩大一倍,然后这些点就变成了“与区间左右端点距离111的点”了 考虑选出这些点后如何进行统计
    i​​的研究价值;,然后线段树维护一下就可以了,也可用前缀,复杂度n×log(n);
      1 #include<bits/stdc++.h>
      2 using namespace std;
      3 typedef long long LL;
      4 LL tree[150006*8];
      5 set<int>vec;
      6 set<int>::iterator it;
      7 typedef struct node
      8 {
      9     int a,b,c;
     10     int l,r;
     11 } ss;
     12 ss mess[50005];
     13 int ak[50005*8];
     14 int ac[50005*8];
     15 int er(int l,int r,int k);
     16 void in(int l,int r,int k,int nn,int mm,LL c);
     17 void ff(int l,int r,int k);
     18 int read_p,read_ca;
     19 inline int read(){
     20     read_p=0;read_ca=getchar();
     21     while(read_ca<'0'||read_ca>'9') read_ca=getchar();
     22     while(read_ca>='0'&&read_ca<='9') read_p=read_p*10+read_ca-48,read_ca=getchar();
     23     return read_p;
     24 }
     25 int main(void)
     26 {
     27     int T;
     28     scanf("%d",&T);
     29     while(T--)
     30     {
     31         memset(tree,0,sizeof(tree));
     32         int n,cs = 0;
     33         n = read();
     34         for(int i = 0; i < n; i++)
     35         {
     36             scanf("%d %d %d %d %d",&mess[i].l,&mess[i].r,&mess[i].a,&mess[i].b,&mess[i].c);
     37             ak[cs++] = mess[i].l*2;
     38             ak[cs++] = mess[i].r*2;
     39             ak[cs++] = mess[i].r*2+1;
     40         }
     41         int cn = 1;
     42         sort(ak,ak+cs);
     43         ac[0] = ak[0];
     44         for(int i = 1; i < cs ; i++)
     45         {
     46             if(ak[i]!=ac[cn-1])
     47             {   ac[cn] = ak[i];
     48                 cn++;
     49             }
     50         }
     51         for(int i = 0;i < n;i++)
     52         {
     53             mess[i].l = er(1,cn-1,mess[i].l*2);
     54             mess[i].r = er(1,cn-1,mess[i].r*2);
     55         }
     56         for(int i = 0; i < n; i++)
     57         {
     58             in(0,mess[i].l-1,0,0,cn,mess[i].c);
     59             in(mess[i].l,mess[i].r,0,0,cn,mess[i].a);
     60             in(mess[i].r+1,cn-1,0,0,cn,mess[i].b);
     61         }
     62         ff(0,cn,0);
     63         LL maxx = 0;
     64         for(int i = 0; i < 150006*8; i++)
     65         {
     66             maxx = max(maxx,tree[i]);
     67 
     68         }
     69         printf("%lld
    ",maxx);
     70     }
     71     return 0;
     72 }
     73 int er(int l,int r,int k)
     74 {
     75     int mid = (l+r)/2;
     76     if(k == ac[mid])
     77         return mid;
     78     else if(k < ac[mid])
     79         return er(l,mid-1,k);
     80     else return er(mid+1,r,k);
     81 }
     82 void in(int l,int r,int k,int nn,int mm,LL c)
     83 {
     84     if(l > r)return ;
     85     if(l > mm||r < nn)
     86         return ;
     87     else if(l <= nn&&r >= mm)
     88     {
     89         tree[k]+=c;
     90         return ;
     91     }
     92     else
     93     {
     94         in(l,r,2*k+1,nn,(nn+mm)/2,c);
     95         in(l,r,2*k+2,(nn+mm)/2+1,mm,c);
     96     }
     97 }
     98 void ff(int l,int r,int k)
     99 {
    100     if(l == r)
    101         return ;
    102     else
    103     {
    104         tree[2*k+1] += tree[k];
    105         tree[2*k+2] += tree[k];
    106         tree[k] = 0;
    107         ff(l,(l+r)/2,2*k+1);
    108         ff((l+r)/2+1,r,2*k+2);
    109     }
    110 }
    
    
    


    aaa、bbb、ccc的值。你需要根据这些信息,给温室选定一个温度(这个温度可以是任意实数),使得Lotus能获得的研究价值最大。
  • 相关阅读:
    Neo4j 第五篇:批量更新数据
    Neo4j 第四篇:使用.NET驱动访问Neo4j
    Neo4j 第三篇:Cypher查询入门
    Neo4j 第二篇:图形数据库
    Neo4j 第一篇:在Windows环境中安装Neo4j
    ElasticSearch入门 第九篇:实现正则表达式查询的思路
    ElasticSearch入门 第八篇:存储
    ElasticSearch入门 第七篇:分词
    ElasticSearch入门 第六篇:复合数据类型——数组,对象和嵌套
    Package 设计3:数据源的提取和使用暂存
  • 原文地址:https://www.cnblogs.com/zzuli2sjy/p/6341558.html
Copyright © 2020-2023  润新知