传送门

\(\color{green}{solution}\)

贪心

/**************************************************************
    Problem: 5158
    User: MiEcoku
    Language: C++
    Result: Accepted
    Time:420 ms
    Memory:5980 kb
****************************************************************/

#include <bits/stdc++.h>
using namespace std;

const int maxn = 100010;

struct Edge {
    int v; Edge *next;
    Edge (int v, Edge *next) : v(v), next(next) {}
    Edge () {}
}*head[maxn], pool[maxn << 1], *pis = pool;

int val[maxn], rd[maxn], top[maxn], n, cnt;
long long ans;
inline void link(int a, int b) {
    head[a] = new (pis ++)Edge(b, head[a]); rd[b]++;
}
priority_queue<int> q;
int tr[maxn << 2];
inline void modify(int c, int l, int r, int L, int o) {
    if( l == r) { tr[c] = o; return;}
    int mid = l + r >> 1;
    if( L <= mid) modify(c << 1, l, mid, L, o);
    else modify(c << 1|1, mid+1, r, L, o);
    tr[c] = max(tr[c << 1], tr[c << 1|1]);
}
int qry(int c, int l, int r, int L) {
    if( r <= L) return tr[c];
    int mid = l + r >> 1;
    if( L <= mid) return qry(c << 1, l, mid, L);
    return max(tr[c << 1], qry(c << 1|1, mid+1, r, L));
}
int main() {
    scanf("%d", &n);
    for ( register int i = 1, x; i <= n; ++ i) {
        scanf("%d", &x); if( (x-1)) link(top[x-1], i);
        if( top[x]) link(i, top[x]); top[x] = i;
    }
    for ( register int i = 1; i <= n; ++ i)
        if( !rd[i]) q.push(i);
    while ( !q.empty()) {
        int u = q.top(); q.pop();
        val[u] = ++cnt;
        for ( Edge *now = head[u]; now; now = now->next)
            if( !(--rd[now->v])) q.push(now->v);
    }
    for ( register int i = n, ret; i; -- i) {
        ret = 1 + qry(1, 1, n, val[i]);
        modify(1, 1, n, val[i], ret); ans += ret;
    }
    printf("%lld\n", ans);
}

[BZOJ 5158][Tjoi2014]Alice and Bob的更多相关文章

  1. [TJOI2014]Alice and Bob[拓扑排序+贪心]

    题意 给出一个序列的以每一项结尾的 \(LIS\) 的长度a[],求一个序列,使得以每一项为开头的最长下降子序列的长度之和最大. \(n\leq 10^5\) . 分析 最优解一定是一个排列,因为如果 ...

  2. [bzoj5158][Tjoi2014]Alice and Bob

    好羞愧啊最近一直在刷水... 题意:给定序列$c$的$a_i$,构造出一个序列$c$使得$\sum b_i$最大. 其中$a_i$表示以$c_i$结尾的最长上升子序列长度,$b_i$表示以$c_i$为 ...

  3. BZOJ5158 [Tjoi2014]Alice and Bob 【贪心 + 拓扑】

    题目链接 BZOJ5158 题解 题中所给的最长上升子序列其实就是一个限制条件 我们要构造出最大的以\(i\)开头的最长下降子序列,就需要编号大的点的权值尽量小 相同时当然就没有贡献,所以我们不妨令权 ...

  4. [TJOI2014] Alice and Bob

    非常好的一道思维性题目,想了很久才想出来qwq(我好笨啊) 考虑a[]数组有什么用,首先可以yy出一些性质 (设num[i]为原来第i个位置的数是什么 , 因为题目说至少有一个排列可以满足a[],所以 ...

  5. 关于TJOI2014的一道题——Alice and Bob

    B Alice and Bob •输入输出文件: alice.in/alice.out •源文件名: alice.cpp/alice.c/alice.pas • 时间限制: 1s 内存限制: 128M ...

  6. UOJ #266 【清华集训2016】 Alice和Bob又在玩游戏

    题目链接:Alice和Bob又在玩游戏 这道题就是一个很显然的公平游戏. 首先\(O(n^2)\)的算法非常好写.暴力枚举每个后继计算\(mex\)即可.注意计算后继的时候可以直接从父亲转移过来,没必 ...

  7. 2016中国大学生程序设计竞赛 - 网络选拔赛 J. Alice and Bob

    Alice and Bob Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) ...

  8. bzoj4730: Alice和Bob又在玩游戏

    Description Alice和Bob在玩游戏.有n个节点,m条边(0<=m<=n-1),构成若干棵有根树,每棵树的根节点是该连通块内编号最 小的点.Alice和Bob轮流操作,每回合 ...

  9. Alice and Bob(2013年山东省第四届ACM大学生程序设计竞赛)

    Alice and Bob Time Limit: 1000ms   Memory limit: 65536K 题目描述 Alice and Bob like playing games very m ...

随机推荐

  1. java的web配置文件的“<load-on-startup>的说明[转]

    <servlet> <servlet-name>log4jInitServlet</servlet-name> <servlet-class>org.s ...

  2. 基于redis实现分布式Session

    学习到好的知识还是需要记录下来的. 开发环境 asp.net mvc4,iis.asp.net 自带的session机制存在诸多不好的地方.先只要列出几点. asp.net mvc 默认的sessio ...

  3. JS作用域理解(声明提升)

    1.JS解析步骤: a.预解析 将变量声明提升: 将函数声明及函数内容提升,可以理解成原来位置的函数在解析代码时已经提到代码初始位置: 块内的变量声明和函数声明也会被提升,例如if语句 遇到重名,只留 ...

  4. 从jvm运行机制来分析 String对象负值

    测试1: 代码 public class Test { public static void main(String[] args) { String s1="aaa"; f(s1 ...

  5. 已经导入到VS工具箱中的DevExpress如何使用

    1.下载安装DevExpress控件(如DXperienceUniversal-11.1.12.exe),安装后路径:“C:\Program Files (x86)\DevExpress 2011.1 ...

  6. [LintCode笔记了解一下]64.合并排序数组

    Given two sorted integer arrays A and B, merge B into A as one sorted array. 思路: 因为A的后面的部分都是空的留出来给我们 ...

  7. 对于nginx为什么能提高性能

    对于后端是动态服务来说,比如Java和PHP.这类服务器(如JBoss和PHP-FPM)的IO处理能力往往不高.Nginx有个好处是它会把Request在读取完整之前buffer住,这样交给后端的就是 ...

  8. 《JavaScript权威指南》(第6版)翻译错误集 更新中。。。

    §6.2.2  P126 原文:If o inherits x,and that property is an accessor property with a setter method. 原译:如 ...

  9. SDOI2013直径(树的直径)

    题目描述: 点这里 题目大意: 就是在一个树上找其直径的长度是多少,以及有多少条边满足所有的直径都经过该边. 题解: 首先,第一问很好求,两边dfs就行了,第一次从任一点找距它最远的点,再从这个点找距 ...

  10. HTML中DOM元素的子节点为空?!firstChild, lastChild, childeNodes[]为空