首页 > 其他分享 >CF 2001 D. Longest Max Min Subsequence(*1900) 思维

CF 2001 D. Longest Max Min Subsequence(*1900) 思维

时间:2024-09-02 14:19:24浏览次数:11  
标签:const Min int Max CF pos 序列 1900 define

CF 2001 D. Longest Max Min Subsequence(*1900) 思维

题目链接

题意

给你一个长度为 \(n\) 的序列 \(a\) ,设 \(S\) 是 \(a\) 的所有可能的非空子序列的集合,且没有重复的元素。你的目标是找出 \(S\) 中最长的序列。如果有多个序列,请找出将奇数位置上的项乘以 \(−1\) 后,使词序最小的序列。

思路

首先序列最大长度就是序列不同元素数。那么每次选择我们都会有一个取值范围。因为跳过该值最后一次出现的位置的话,就会导致序列最大长度不满足题意。因此,我们可以去维护每次选择的起点和终点。显然,对于奇数项,我们选择最大的,对于偶数项,我们选择最小的。并且选择完之后,我们需要删除后面所有与该值相等的元素。因此使用 multiset 可以很方便的去进行维护。接下来考虑如何维护每次可供选择的数值范围。我们可以使用优先队列,维护每个值出现的最后位置。这样就可以更新区间右端点,左端点直接更新成选择值的下一个位置即可。

代码

#include<bits/stdc++.h>

using namespace std;

#define ff first
#define ss second
#define pb push_back
#define all(u) u.begin(), u.end()
#define endl '\n'
#define debug(x) cout<<#x<<":"<<x<<endl;

typedef pair<int, int> PII;
typedef long long LL;
const int inf = 0x3f3f3f3f;
const int N = 1e5 + 10, M = 105;
const int mod = 1e9 + 7;
const int cases = 1;

void Showball(){
    int n;
    cin>>n;
    vector<int> a(n);
    map<int,int> pos,st;
    priority_queue<PII,vector<PII>,greater<PII>> pq;
    for(int i=0;i<n;i++){
      cin>>a[i];
      pos[a[i]]=i;
    }
    for(auto [x,p]:pos){
      st[x]=0;
      pq.push({p,x});
    }

    int ans=pos.size();
    cout<<ans<<endl;
    
    int head=0,tail=-1;
    multiset<int> mst;
    for(int i=1;i<=ans;i++){
      while(st[pq.top().ss]==1) pq.pop();
      for(int j=tail+1;j<=pq.top().ff;j++){
        if(st[a[j]]==0) mst.insert(a[j]);
      }
      tail=pq.top().ff;
      int num=0;
      if(i&1) num=*mst.rbegin();
      else num=*mst.begin();
      st[num]=1;
      mst.erase(num);
      cout<<num<<" ";

      for(int j=head;;j++){
        if(mst.find(a[j])!=mst.end()) mst.erase(mst.find(a[j]));
        if(a[j]==num){
          head=j+1;
          break;
        }
      }
    }
    cout<<endl;
}
int main(){
    ios::sync_with_stdio(false);
    cin.tie(nullptr);
    cout.tie(nullptr);
    int T=1;
    if(cases) cin>>T;
    while(T--)
    Showball();
    return 0;
}

标签:const,Min,int,Max,CF,pos,序列,1900,define
From: https://www.cnblogs.com/showball/p/18392607

相关文章

  • CF 2002 D1. DFS Checker (Easy Version) (*1900)思维
    CF2002D1.DFSChecker(EasyVersion)(*1900)思维题目链接题意:给你一棵\(n\)个节点组成的完全二叉树,并给出一个排列\(p\)。接下来进行\(q\)次询问。每次询问给你\(x\)和\(y\),你需要交换\(p_x\)和\(p_y\)。并且回答交换之后的排列\(p\)是否是这棵完全二叉树......
  • CF 2004 D. Colored Portals (*1600) 二分
    CF2004D.ColoredPortals(*1600)二分题目链接题意:有\(n\)座城市,编号从\(1\)到\(n\)。传送门一共有\(4\)种颜色,每个城市有两种不同颜色的传送门。若城市\(i\)和城市\(j\)有相同颜色的传送门。那么就可以花费\(|i-j|\)枚金币从城市\(i\)到城市\(j\)。\(q\)......
  • 2019-2020 ICPC Northwestern European Regional Programming Contest (NWERC 2019):GH
    前言目前打过的最逆天的一场,前半场CF评测机度假去了,全场Inqueue,两小时左右评测机终于回来了,Standings遍地开花,听取WA声一片。昨天就有好几道题是因为没及时看题所以没做,赛后还和队友商量说应该先把所有题大致看一遍,结果今天不长记性,还没看H和J,就去写思路不一定对+实现起来难得......
  • CF2008场题解
    Sakurako'sExam算法:模拟,分类讨论。题意简述:给\(a\)个数字\(1\)和\(b\)个数字\(2\),问能否在每个数字前加上加减号使得原始值为\(0\)。考虑\(1\)的个数如果是奇数,那么一定不行。否则如果\(2\)的个数是偶数,一定可以。当\(2\)的个数为奇数且还可能可以时,判断是否存......
  • SDKD 2024 Summer Training Contest F2(The 13th Shandong ICPC Provincial Collegiat
    A-Orders题意每天能生产k个产品的工厂有n个订单,第i个订单是在a_i天交b_i个产品,问能否交付。思路订单按日期排序,记录剩下的商品.代码#define_CRT_SECURE_NO_WARNINGS#include<bits/stdc++.h>usingnamespacestd;#defineintlonglongconstintmxn=1e6+5......
  • 【#第三期实战营闯关作业 ## MindSearch在 Hugging FaceSpace的部署】
    把MindSearch部署到GithubCodespace后,下一步就是上传到HuggingFaceSpace,以下是记录了实操的过程及截图:打开https://huggingface.co/spaces,并点击CreatenewSpace,如下图所示:在输入Spacename并选择License后,选择配置如下面截图所示:3进入Settings,配置硅基......
  • CF 有趣题目做题笔记
    CF1157FMaximum_Balanced_CircleProblem题意:给出一个长度为\(n\)的序列\(a\),你可以选出序列的任意子集。记这个子集为\(b\),大小为\(k\),则需要满足\(\lvertb_i-b_{(i+1)\bmodk}\rvert\le1\)。你需要最大化\(k\)的值,并输出选出的子集\(b\)。Solution注意到最终......
  • CF1826D
    CF1826D链接:Problem-1826D-Codeforces题目大意:给你一个数组,让你选择一个区间\([l,r]\)设选中的区间为\(b\),\(b_{i_1}+b_{i_2}+b_{i_3}\)为区间内前三大的值,你需要选择一个区间使得\(b_{i_1}+b_{i_2}+b_{i_3}-(r-l)\)值最大,输出最大值思路:我们发现......
  • 地平线—征程2(Journey 2-J2)芯片详解(32)—I2S+JTAG Interface Timing
    写在前面本系列文章主要讲解地平线征程2(Journey2-J2)芯片的相关知识,希望能帮助更多的同学认识和了解征程2(Journey2-J2)芯片。若有相关问题,欢迎评论沟通,共同进步。(*^▽^*)错过其他章节的同学可以电梯直达目录↓↓↓地平线—征程2(Journey2-J2)芯片详解——目录-CSDN博客1......
  • 来了,HelpLook接入GPT4o-mini,OpenAI大动作!如何巧妙运用AI新功能?
    上月,OpenAI推出了其最新人工智能模型——GPT-4oMini。作为当前较为实用的小型模型,GPT-4oMini旨在大幅拓展AI应用领域,同时显著降低开发成本。每百万输入tokens仅需15美分,输出tokens为60美分,远低于先前的GPT-3.5Turbo。HelpLook率先接入GPT-4oMini大模型,为大家带来福利。......