我看到有人用线段树来写而且想法和我的差不多,但是代码有一点复杂,所以我就贴一下我的做法。


思路

首先一定知道纯暴力50分差不多了,所以看到k非常的小,那么就从k入手。
不知道有没有人和我一样是先枚举颜色的,那么我们来思考一下,对于每个相同颜色的客站之间[l,r],如果当前区间不能找到一个合理的咖啡厅,那么一定会影响到和他连在一起的下一个不能找到咖啡厅的区间。那么我们就将这个标记放在r这个节点上,那么第一个节点我们就当做是0。
说的形象一点,就是看这个节点能和前面多少个相同颜色的客栈组成合法的方案。
如果当前的区间是合法的,那么前面的所有点都是可以和这个点组成方案。


算法实现

每一次算出这个客栈之前有多少个相同颜色的客栈,然后我们通过一个标记,表示在与这个区间相连接的前面几个区间内有多少个不合法的区间,每一次算的时候我们就需要把这些点数减掉。
如果当前的区间是不合法的,那么我们就需要将这个标记+1,否则就将这个标记设置成0。


代码

# include <bits/stdc++.h>
# define N 200005
# define Inf 0x3f3f3f3f
using namespace std ;
struct node {
    int c , v ;
}a[N] ;
int n , k , p , ans = 0 ;
int main () {
    scanf( "%d%d%d" , &n , &k , &p ) ;
    for ( int i = 1 ; i <= n ; i ++ ) scanf( "%d%d" , &a[i].c , &a[i].v ) ;
    for ( int i = 0 ; i < k ; i ++ ) {
        int cnt = 0 , sub = Inf , tmp = 0 , re = 0 ; //re表示有多少连接的前区间不合法
        for ( int j = 1 ; j <= n ; j ++ ) {
            sub = min ( a[j].v , sub ) ;
            if ( a[j].c == i ) {
                tmp += cnt ++ ;
                if ( sub > p ) tmp = max ( tmp - ++ re , 0 ) ;
                else re = 0 ;
                sub = a[j].v ;
            }
        }
        ans += tmp ;
    }
    printf( "%d\n" , ans ) ;
    return 0 ;
}

[NOIP提高组2011day1t2]选择客栈的更多相关文章

  1. 【11NOIP提高组】选择客栈(信息学奥赛一本通 1546)(洛谷 1311)

    题目描述 丽江河边有nn家很有特色的客栈,客栈按照其位置顺序从 11到nn编号.每家客栈都按照某一种色调进行装饰(总共 kk 种,用整数 00 ~k-1k−1 表示),且每家客栈都设有一家咖啡店,每家 ...

  2. 洛谷P1311 [NOIP2011提高组Day1T2]选择客栈

    P1311 选择客栈 题目描述 丽江河边有n 家很有特色的客栈,客栈按照其位置顺序从 1 到n 编号.每家客栈都按照某一种色调进行装饰(总共 k 种,用整数 0 ~ k-1 表示),且每家客栈都设有一 ...

  3. 【NOIP2011提高组】选择客栈

    题目不附了,是一个单纯的ST模型,但是考验各种常数优化. 最大的优化是对于同颜色的客栈来说,如果1号和2号成功配对了,那么1和3,1和4都可以成功配对,那么只要找到一对成功配对的,我们就直接加上剩下的 ...

  4. NOIP2011提高组(选择客栈)

    题目链接:http://codevs.cn/problem/1135/ 题目大意:中文题...就不解释了 题目思路:看了其他巨巨的blog写的,dp思路 #include <iostream&g ...

  5. [NOIP提高组2018]货币系统

    [TOC] 题目名称:货币系统 来源:2018年NOIP提高组 链接 博客链接 CSDN 洛谷博客 洛谷题解 题目链接 LibreOJ(2951) 洛谷(P5020) 大视野在线评测(1425) 题目 ...

  6. NOIP提高组2004 合并果子题解

    NOIP提高组2004 合并果子题解 描述:在一个果园里,多多已经将所有的果子打了下来,而且按果子的不同种类分成了不同的堆.多多决定把所有的果子合成一堆. 每一次合并,多多可以把两堆果子合并到一起,消 ...

  7. 计蒜客 NOIP 提高组模拟竞赛第一试 补记

    计蒜客 NOIP 提高组模拟竞赛第一试 补记 A. 广场车神 题目大意: 一个\(n\times m(n,m\le2000)\)的网格,初始时位于左下角的\((1,1)\)处,终点在右上角的\((n, ...

  8. 1043 方格取数 2000 noip 提高组

    1043 方格取数  2000 noip 提高组 题目描述 Description 设有N*N的方格图(N<=10,我们将其中的某些方格中填入正整数,而其他的方格中则放入数字0.如下图所示(见样 ...

  9. NOIP提高组初赛难题总结

    NOIP提高组初赛难题总结 注:笔者开始写本文章时noip初赛新题型还未公布,故会含有一些比较老的内容,敬请谅解. 约定: 若无特殊说明,本文中未知数均为整数 [表达式] 表示:在表达式成立时它的值为 ...

随机推荐

  1. CentOS7源码升级OpenSSL和OpenSSH

    一.CentOS7升级OpenSSL 1.查看ssl版本及下载相关依赖包 openssl version -a yum install -y gcc openssl-devel pam-devel r ...

  2. Jmeter之上传数据流(图片、文本等)请求

    MIME类型~Content-Type: 参数名称~name

  3. CPU Cache 机制以及 Cache miss

    CPU体系结构之cache小结 1.What is cache? Cache是用来对内存数据的缓存. CPU要访问的数据在Cache中有缓存,称为“命中” (Hit),反之则称为“缺失” (Miss) ...

  4. Day 3-3 内置方法

    常用内置函数方法: min,max li = [1, 2, 3, 6, 9, 5, 10, 26] print('li的最小值是:', min(li)) # 取最小值 print('li的最大值是:' ...

  5. 使用Guava cache构建本地缓存

    前言 最近在一个项目中需要用到本地缓存,在网上调研后,发现谷歌的Guva提供的cache模块非常的不错.简单易上手的api:灵活强大的功能,再加上谷歌这块金字招牌,让我毫不犹豫的选择了它.仅以此博客记 ...

  6. linux硬盘的分区、格式化、挂载以及LVM

    linux硬盘的分区.格式化.挂载以及LVM   多块硬盘的组合: 硬盘分两种:ide和scsi. ide硬盘: /dev/hda 第一块IDE硬盘 /dev/hdb 第二块IDE硬盘 ... /de ...

  7. sql查询(转)

    http://www.51testing.com/html/41/n-4421541.html 1 负向条件查询(例如:!=.not in.not exists)都是不能使用索引,少用 可以使用:se ...

  8. Python——Flask框架——模板

    一.渲染模板 render_template 函数把Jinja2模板引擎集成到程序中 二.Jinja2变量过滤器 过滤器名 说明 safe 渲染值是不转义 capitalize 把值得首字母转换成大写 ...

  9. github上传时出现error: src refspec master does not match any解决办法22

    1 error:src refspec master does not match any这个问题,我之前也遇到过,这次又遇到了只是时间间隔比较长了,为了防止以后再遇到类似问题,还是把这个方法简单记录 ...

  10. OPENQUERY (Transact-SQL)

    Syntax Copy OPENQUERY ( linked_server ,'query' ) Arguments linked_serverIs an identifier representin ...