• COGS——T 2739. 凯伦和咖啡


    http://www.cogs.pro/cogs/problem/problem.php?pid=2739

    ★★☆   输入文件:coffee.in   输出文件:coffee.out   简单对比
    时间限制:1 s   内存限制:512 MB

    【题目描述】

    为了在上课时保持清醒,凯伦需要一些咖啡。咖啡爱好者凯伦想知道最佳的温度来冲煮完美的咖啡。因此,她花了一些时间阅读几本食谱,其中包括广受好评的“咖啡的艺术”。

    她知道有n个食谱,其中第i个食谱建议应当在li和ri度之间冲煮以达到最佳的味道。凯伦认为如果至少k个食谱推荐某个温度,那么那个温度是可以接受的。

    凯伦的性格比较多变,因此她会问q个问题,对于每一个问题,她会给出一个温度区间[a,b],你要告诉她有多少可接受的整数温度在这个范围内。

    【输入格式】

    第一行输入包含三个整数,n,k(1≤k≤n≤200000)和q(1≤q≤200000),如题中所描述。

    接下来n行描述每一个食谱,具体来说,其中的第i行包含两个整数li和ri(1≤li≤ri≤200000),描述第i个食谱建议咖啡在li和ri度之间进行冲煮(包括端值)。

    接下来q行为q个询问。这些行中的每一行都包含a和b,(1≤a≤b≤200000),表示她想知道a和b度之间的可接受的整数温度的数量,包括a和b。

    【输出格式】

    对于每个询问,一行输出一个答案。

    【样例输入】

    3 2 4

    91 94

    92 97

    97 99

    92 94

    93 97

    95 96

    90 100

    【样例输出】

    3

    3

    0

    4

    【提示】

    数据进行了更新,卡掉了部分暴力程序。

    【来源】

    线段树//分块//(好像有线性作法呃呃呃)

     1 #include <cstdio>
     2 
     3 const int N(200000+5);
     4 int n,q,k;
     5 struct Tree
     6 {
     7     int l,r,sum,flag,ret;
     8 }tr[N<<2];
     9 #define lc (now<<1)
    10 #define rc (now<<1|1)
    11 #define mid (tr[now].l+tr[now].r>>1)
    12 void Tree_build(int now,int l,int r)
    13 {
    14     tr[now].l=l,tr[now].r=r;
    15     if(l==r)
    16     {
    17         tr[now].flag=1;
    18         tr[now].sum=0;
    19         return ;
    20     }
    21     Tree_build(lc,l,mid);
    22     Tree_build(rc,mid+1,r);
    23 }
    24 void Tree_add(int now,int l,int r)
    25 {
    26     if(tr[now].l>=l&&tr[now].r<=r)
    27     {
    28         tr[now].sum++;
    29         return ;
    30     }
    31     if(r<=mid) Tree_add(lc,l,r);
    32     else if(l>mid) Tree_add(rc,l,r);
    33     else Tree_add(lc,l,mid),Tree_add(rc,mid+1,r);
    34 }
    35 int Tree_query(int now,int l,int r)
    36 {
    37     if(tr[now].l==l&&tr[now].r==r) return tr[now].sum;
    38     if(r<=mid) return Tree_query(lc,l,r);
    39     else if(l>mid) return Tree_query(rc,l,r);
    40     else return Tree_query(lc,l,mid)+Tree_query(rc,mid+1,r);
    41 }
    42 void Tree_push(int now)
    43 {
    44     if(tr[now].flag)
    45     {
    46         if(tr[now].sum>=k) tr[now].sum=1;
    47         else tr[now].sum=0;
    48         return ;
    49     }
    50     tr[lc].sum+=tr[now].sum;
    51     tr[rc].sum+=tr[now].sum;
    52     tr[now].sum=0;
    53     Tree_push(lc); Tree_push(rc);
    54     tr[now].sum=tr[lc].sum+tr[rc].sum;
    55 }
    56 
    57 inline void read(int &x)
    58 {
    59     x=0; register char ch=getchar();
    60     for(;ch>'9'||ch<'0';) ch=getchar();
    61     for(;ch>='0'&&ch<='9';ch=getchar()) x=x*10+ch-'0';
    62 }
    63 
    64 #define swap(a,b) {int tmp=a;a=b;b=tmp;}
    65 int AC()
    66 {
    67     freopen("coffee.in","r",stdin);
    68     freopen("coffee.out","w",stdout);
    69     read(n),read(k),read(q);
    70     Tree_build(1,1,N);
    71     for(int l,r;n--;)
    72     {
    73         read(l),read(r);
    74         if(l>r) swap(l,r);
    75         Tree_add(1,l,r);
    76     }
    77     Tree_push(1);
    78     for(int l,r;q--;)
    79     {
    80         read(l),read(r);
    81         if(l>r) swap(l,r);
    82         printf("%d
    ",Tree_query(1,l,r));
    83     }
    84     return 0;
    85 }
    86 
    87 int Hope=AC();
    88 int main(){;}
    ——每当你想要放弃的时候,就想想是为了什么才一路坚持到现在。
  • 相关阅读:
    Linux 查看本地ip
    php 利用debug_backtrace方法跟踪代码调用
    开源镜像站,vmware下载
    robots.txt 让搜索引擎不再收录网站
    PHP 面向对象 final类与final方法
    开源代码
    PHPStorm设置Ctrl+滚轮调整字体大小
    PHP array_chunk() 妙用
    第九节 JavaScript提取行间事件
    第八节 JavaScript函数的定义和执行
  • 原文地址:https://www.cnblogs.com/Shy-key/p/7465273.html
Copyright © 2020-2023  润新知