ARC156F Make Same Set 做题记录

给定三个长 nn 的序列 A,B,CA,B,C,找到一个符合以下条件且大小最大的集合 SS

  • 其能被这样生成:对于每个 i[1,n]i\in [1, n],向 SS 中加入 AiA_i 或者 BiB_i
  • 其能被这样生成:对于每个 i[1,n]i\in [1, n],向 SS 中加入 AiA_i 或者 CiC_i

需要输出方案。

1n50001\le n\le 50001Ai,Bi,Ci100001\le A_i,B_i,C_i\le 10000

阅读全文 »

CF1442D Sum 做题记录

给定 nn 个单调不降的数组,初始计数器 sum=0sum=0。你需要进行 kk 次操作,每次选择某个数组的第一个未被删除的元素 xx,将 sumsum 加上 xx,然后将 xx 从这个数组中删去。最大化 sumsum

1n,k30001\le n,k\le 3000,所有数组长度之和不超过 10610^6,值域 [0,108][0,10^8]

阅读全文 »

【PR #15】二叉搜索树 做题记录

有一棵 nn 个点的树,每个点上有一个二叉搜索树。

然后依次进行 mm 次操作:

  • 1 u v x:在 uvu\to v 路径上每个点的二叉搜索树中插入元素 xx,即 p{uv}\forall p\in \{u\to v\} 执行 insert(rtp,x)\text{insert}(rt_p,x)

    void insert(int&p,int x){
        if(!p) return p=x,void();
        if(x<p) insert(ch[p][0],x);
        else insert(ch[p][1],x);
    }
    
  • 0 u w:在点 uu 上的二叉搜索树中执行 ask(rtu,w)\text{ask}(rt_u,w),求其返回值:

    long long ask(int p,int x){
        if(x==p) return x;
        if(x<p) return ch[p][0]?ask(ch[p][0])+p:p;
        else return ch[p][1]?ask(ch[p][1])+p:p;
    }
    

1n,m,x,w2×1051\le n,m,x,w\le 2\times 10^5,每次 11 操作的 xx 互不相同。

阅读全文 »

QOJ2211 IOI Problem Revised 做题记录

nn 个人在一个长 LL 的环上,第 ii 个人位于坐标 aia_i 处。你要选择 kk 个关键点,最小化每个人到最近的关键点的距离的和。输出方案。

1kn2×1051\le k\le n\le 2\times 10^51L10121\le L\le 10^{12}

阅读全文 »