首页 > 其他分享 >[ARC164E] Segment-Tree Optimization 题解

[ARC164E] Segment-Tree Optimization 题解

时间:2023-12-08 22:11:51浏览次数:37  
标签:typedef ch 题解 void Tree long ARC164E template define

题目链接

题目链接

题目解法

一个自认为比较自然的解法

这种一段序列切成两部分的问题首先考虑区间 \(dp\)
令 \(f_{l,r}\) 为 \([l,r]\) 能构成的最小深度,\(g_{l,r}\) 为在 \(f_{l,r}\) 最小的情况下最少的最大深度的点的个数
转移枚举 \(k\) 即可
需要在下面是叶子的时候处理一些边界问题
这样复杂度是 \(O(n^3)\) 的

套路的,我们试一试用四边形不等式,发现能过,但我也不知道怎么证决策单调性
时间复杂度 \(O(n^2)\)

#include <bits/stdc++.h>
#define F(i,x,y) for(int i=(x);i<=(y);i++)
#define DF(i,x,y) for(int i=(x);i>=(y);i--)
#define ms(x,y) memset(x,y,sizeof(x))
#define SZ(x) (int)x.size()-1
#define pb push_back
using namespace std;
typedef long long LL;
typedef unsigned long long ull;
typedef pair<int,int> pii;
template<typename T> void chkmax(T &x,T y){ x=max(x,y);}
template<typename T> void chkmin(T &x,T y){ x=min(x,y);}
template<typename T> void read(T &FF){
    FF=0;int RR=1;
    char ch=getchar();
    for(;!isdigit(ch);ch=getchar()) if(ch=='-') RR=-1;
    for(;isdigit(ch);ch=getchar()) FF=(FF<<1)+(FF<<3)+ch-48;
    FF*=RR;
}
const int N=4100,inf=1e9;
struct Node{ int f,g;}dp[N][N];
bool chk(Node o1,Node o2){
    if(o1.f^o2.f) return o1.f<o2.f;
    return o1.g<o2.g;
}
int n,m,s[N][N],pos[N][N];
int calc(int x1,int x2,int y1,int y2){ return s[x2][y2]-s[x1-1][y2]-s[x2][y1-1]+s[x1-1][y1-1];}
int main(){
    read(n),read(m);
    F(i,1,m){ int l,r;read(l),read(r);s[l][r]++;}
    if(s[1][n]==m){ printf("0 %d\n",m);exit(0);}
    F(i,1,n) F(j,1,n) s[i][j]+=s[i-1][j]+s[i][j-1]-s[i-1][j-1];
    F(i,1,n) dp[i][i]={0,0},pos[i][i]=i;
    F(len,2,n) F(l,1,n-len+1){
        int r=l+len-1;
        int res=calc(1,l-1,1,l-1)+calc(r+1,n,r+1,n)+calc(1,l,r,n);
        if(res==m){ dp[l][r]={0,0},pos[l][r]=l;continue;}
        dp[l][r]={inf,inf},pos[l][r]=l;
        F(k,pos[l][r-1],min(r-1,pos[l+1][r])){
            auto dp1=dp[l][k],dp2=dp[k+1][r];
            Node ndp;
            if(!dp1.f&&!dp2.f) ndp.f=1,ndp.g=calc(1,l,l,r-1)+calc(1,l,l,k)+calc(k+1,r,r,n)+calc(l+1,r,r,n);
            else{
                if(dp1.f>dp2.f) ndp=dp1,ndp.f++;
                else if(dp1.f<dp2.f) ndp=dp2,ndp.f++;
                else ndp={dp1.f+1,dp1.g+dp2.g};
            }
            if(chk(ndp,dp[l][r])) dp[l][r]=ndp,pos[l][r]=k;
        }
    }
    printf("%d %d\n",dp[1][n].f,dp[1][n].g);
    return 0;
}

标签:typedef,ch,题解,void,Tree,long,ARC164E,template,define
From: https://www.cnblogs.com/Farmer-djx/p/17889155.html

相关文章

  • 2023.12.7 挑战杯题解
    选择题T1有序实数对即为数,坐标系中的点\(P\)即为形。故选择A。T2\(9.46\times10^{12}=9460000000000\)为\(13\)位数所以选D。T3如图所示,过点\(D\)作\(DE\botAB\),设\(AE=x\),在\(Rt\DeltaADE\)中利用勾股定理列方程为\((x-1)^2+10^2=x^2\),解得\(x=\frac{101}{2......
  • PTA-2023第十二次练习题目题解
    PTA-2023第十二次练习题目题解(祝大家机考顺利)以下代码已做防抄袭处理,切勿抄袭。注意:手机端因为屏幕限制,代码会有(不希望的)换行。解决方案:1.建议使用电脑端打开。2.点击代码进入全屏观看。6-24实验8_3_设计函数利用冒泡排序的思想,将每一列的最小值放到每列的最后一个位置。voi......
  • element tree 优化线条树,添加增删改功能
    需求:树状结构,支持操作功能(同级、子级、修改、删除)。根据需求是否展示复选框和操作功能。封装linetree.vue组件:1<template>2<div>3<el-tree:data="list":props=defaultProps:expand-on-click-node="false":default-expand-all="true"4......
  • [AGC049D] Convex Sequence 题解
    题目链接点击打开链接题目解法好题!!考虑原题的限制相当于原序列下凸,即差分数组单调考虑把原序列在第一个最小值处割成\(2\)半因为原序列是凸的,所以非最小值的长度是\(\sqrt{2m}\)级别的这可以让我们\(dp\)差分数组,即求满足\(\sum\limits_{i=1}^{n'}ib_i=m'\)的\(b......
  • 树上启发式合并(dsu on tree)
    dsuonTree(树上启发式合并)当遇到处理子树询问,并且无修改时。可以考虑树上启发式合并。算法流程:step1:处理出每个点的\(siz_x\)以及重儿子\(son_x\)。voiddfs(intx,intfa){ siz[x]=1; intMaxson=0; for(inti=0;i<p[x].size();i++){ inty=p[x]......
  • Sourcetree安装详细步骤
    Sourxetree作为免费的Git客户端工具,有许多优点。Sourcetree简化了与Git存储库交互的方式,因此我们可以专注于编码。通过Sourcetree简单又快捷的管理我们的存储库。1.下载https://www.sourcetreeapp.com/2.安装3.创建伪账号进入文件夹%LocalAppData%\Atlassian\Source......
  • [ARC165E] Random Isolation 题解
    题目链接点击打开链接题目解法略有些套路的概率题,不过中间的把操作序列看成排列的操作还是很妙的首先套路的考虑期望的线性性,有两个方式:把贡献放在点上或点集上,这里采用后面的方式做对于每一个树上的集合\(S\),假设大小为\(n\),相邻的点为\(m\)考虑这个集合独立的限制为:相......
  • Emiya今天的饭 题解
    题目考虑条件主要食材最大的不超过总菜数的一半,不好处理,但存在主要食材最大的超过总菜数的一半是好处理的,容斥即可。首先计算所有情况,由于题目要求每个烹饪方式最多使用一次,很明显可以记\(g_i\)表示前\(i\)种烹饪方式的方案数。\[g_i=g_{i-1}+g_{i-1}\times\sum_{j=1}^......
  • 虚拟机运行Hadoop | 各种问题解决的心路历程
    ps:完成大数据技术实验报告的过程,出项各种稀奇古怪的问题。(知道这叫什么吗?经济基础决定上层建筑,我当时配置可能留下了一堆隐患,总之如果有同样的问题,希望可以帮到你)一、虚拟机网络连接不通的各种情况我这里遇到的是,三台虚拟机,两台piing百度不同原因:改了下内存,重启就又未知的网......
  • 【luogu题解】U388218 数数
    数数题目描述给定n个不超过1.5×10⁹的自然数。求这些自然数各自出现的次数,并按照自然数从小到大的顺序输出统计结果。输入格式输入的第1行是整数n,表示自然数的个数。第2行到第n+1行每行一个自然数。输出格式输出文件包含m行(m为n个自然数中不相同数的个......