zoukankan      html  css  js  c++  java
  • 【POI每日题解 #7】TES-Intelligence Test

    题目链接

    这道题第一眼看去类比BANK-Cash Dispenser

    不过1e6 * 1e6 = 1e12   分分钟MLE啊

    想到优化 就yy到一种近似主席树的做法 来维护类似BANK的一堆序列

    开心地打完 然鹅 MLE 陷入沉思

    对一个值 有三种取得方式 一 存储 二 查找 三 推导

    我们需要知道一个数后的另一个数在哪里

    前者的最优方式已经凉了【或许有更优?请路过神犇指教

    三看起来好像不大可行。。。

    那就二吧

    但线性查找肯定凉的 想到log级优化

    Log + 查找 = 二分查找啊

    但是原数列不具有单调性

    然鹅竟然卡在这里了= =

    题解:存储一个数所在的位置

    每次求这目标数的位置中大于当前数的最小位置

    然鹅 这样存数组还是1e12的

    只好上vector了

     

    附:vector讲解

     1     while(n--){
     2         scanf("%d", &l);
     3         for(int i = 1; i <= l; i++) scanf("%d", &a[i]);
     4         //注意这里做离线!不然在后面退出的时候会导致残留
     5         int j = 0; bool flag = 1;
     6         vector<int> :: iterator it;
     7         for(int i = 1; i <= l; i++){
     8             it = upper_bound(v[a[i]].begin(), v[a[i]].end(), j);
     9         //STL就是6
    10             if(it == v[a[i]].end()){
    11                 flag = 0; break;
    12             }
    13             else j = *it;
    14         }
    15         if(flag) printf("TAK
    ");
    16         else printf("NIE
    ");
    17     }
    关键部分
  • 相关阅读:
    几句让自己保留的动力的格言
    repo 的几个使用理解
    (转)汇编中断大全
    (转) 汇编.section和.text解释
    find 命令一些小技巧;
    android 系统使用c语言获取系统属性
    新的起点
    PDBC详细介绍
    PDBC(连接数据库)
    Python——基础知识
  • 原文地址:https://www.cnblogs.com/hjmmm/p/9232049.html
Copyright © 2011-2022 走看看