【题解】Range Sorting (Hard Version) 思路记录

version1.0

考虑数组中的最小值:

  1. 此时最小值一定要一道最左边去,不如整体排序
    综合结果:排序[1,pos[1]]
  2. 考虑次小值:
    如果 pos[2]<pos[1] 下一个;
    否则 排序[2,pos[2]]

总结下来看,单调栈。每次取右边的最小值排序。

每个点有一个下标和权值 -> 笛卡尔树

询问就相当于所有右链的权值之和

考虑一个点什么时候会成为右链,当且仅当 l>这棵树的下标最小值 r<这棵树下标最大值

结束!

version 2.0

考虑数组中的最小值:

  1. 此时最小值一定要一道最左边去,不如整体排序
    综合结果:排序[1,pos[1]],总共花费 pos[1]-1;
  2. 考虑次小值:
    如果 pos[2]<pos[1] 下一个;
    否则 排序[pos[1]+1,pos[2]],再排序[1,pos[1]+1],总共花费 pos[2]-1;

总结下来看,单调栈。每次取右边的最小值排序。

每个点有一个下标和权值 -> 笛卡尔树

询问就相当于最右边的点权值-1

发现只要这个点为答案,当且仅当它的父亲都是原父亲(如果有)的右儿子。

结束!

posted @ 2025-02-17 15:55  GuTongXing  阅读(12)  评论(0)    收藏  举报