首页 > 其他分享 >好序列 启发式分治

好序列 启发式分治

时间:2022-12-31 15:11:48浏览次数:31  
标签:pr return int 分治 pos 序列 solve 启发式

 

 

//题意:给定一个序列,如果这个序列的每个子区间都满足:至少有一个数只在这个区间内出现一次。那么这个序列称为好序列
//思路:本题可以用点分治做,这里采用的是启发式分治的做法,详情见博客
#include<bits/stdc++.h>
using namespace std;
const int N = 201000;
int a[N], n, pre[N], nxt[N];//记录序列
bool solve(int l, int r) {
    if (l > r) return true;
    for (int pl = l, pr = r; pl <= pr; pl++, pr--) {
        if (pre[pl]<l && nxt[pl]>r)
            return solve(l, pl - 1) && solve(pl + 1, r);
        if (pre[pr]<l && nxt[pr]>r)
            return solve(l, pr - 1) && solve(pr + 1, r);
    }
    return false;
}
bool solve() {
    scanf("%d", &n);
    for (int i = 1; i <= n; i++) scanf("%d", &a[i]);
    map<int, int> pos;//数字种类与该类数字最后一次出现的位置相对应
    for (int i = 1; i <= n; i++) {
        if (pos.count(a[i])) pre[i] = pos[a[i]];
        else pre[i] = 0;
        pos[a[i]] = i;
    }
    pos.clear();
    for (int i = n; i >= 1; i--) {
        if (pos.count(a[i])) nxt[i] = pos[a[i]];
        else nxt[i] = n + 1;
        pos[a[i]] = i;
    }
    return solve(1, n);
}
int main() {
    int tc;
    scanf("%d", &tc);
    for (int T = 0; T < tc; T++) {
        puts(solve() ? "non-boring" : "boring");
    }
}

 

 

 

标签:pr,return,int,分治,pos,序列,solve,启发式
From: https://www.cnblogs.com/Aacaod/p/17016677.html

相关文章

  • Linux环境下获取硬盘序列号
    项目中有需求要读取整机或主板序列号,无奈客户目标机是定制产品,既没有整机序列号,也没有主板序列号,只能退而求其次,改用硬盘序列号。研究一番,记录如下:1.IntelNUC cat/sys/c......
  • 【题解】P3515 [POI2011]Lightning Conductor(二分栈/分治优化DP)
    [POI2011]LightningConductor题面翻译给定一个长度为\(n\)的序列\(\{a_n\}\),对于每个\(i\in[1,n]\),求出一个最小的非负整数\(p\),使得\(\forallj\in[1,n]\),都......
  • shiro-550反序列化分析
    搭个环境root/secret原理shiro反序列化产生原因是因为shiro接受了Cookie里面rememberMe的值,然后去进行Base64解密后,再使用aes密钥解密后的数据,进行反序列......
  • 每日算法之和为S的连续正数序列
    JZ74和为S的连续正数序列题目小明很喜欢数学,有一天他在做数学作业时,要求计算出9~16的和,他马上就写出了正确答案是100。但是他并不满足于此,他在想究竟有多少种连续......
  • 最长递增子序列
    目录题目思路,粗暴的递归动态规划解法做题时的全部思路,是一边做一边写的。代码俺的一些话题目给你一个整数数组nums,找到其中最长严格递增子序列的长度。子序列是由数......
  • Java 序列化,字段为null 是否返回
    java字段值为null,不返回该字段类上打注解不让null值返回前端场景:有时候我们返回给前端的数据是null的,而这些为null的值前端也不需要,我们就没必要吧null值返回给前端......
  • HZOJ 最长公共上升子序列 动态规划
    题面: 解题思路:首先定义状态dp[i][j]表示序列ai和序列bj的最长公共上升子序列的长度  代码:#include<iostream>#include<cstdio>#include<cstdlib>#incl......
  • PYTHON用时变马尔可夫区制转换(MARKOV REGIME SWITCHING)自回归模型分析经济时间序列|附
    全文下载链接:http://tecdat.cn/?p=22617最近我们被客户要求撰写关于MRS的研究报告,包括一些图形和统计输出。本文提供了一个在统计模型中使用马可夫转换模型模型的例子,来......
  • rdf序列化关联字段
    ##问题描述#序列化方式classOrderSerializer(serializers.ModelSerializer):classMeta:model=Orderfields="__all__"##得到的结果......
  • 【新生寒训】day 2 分治
    【新生寒训】day2分治https://oi-wiki.org/basic/divide-and-conquer/瞅了一眼,单纯练分治的题都挺入门的,比较进阶的题目一般是树上问题,以及与一些数据结构进行结合等等......