首页 > TAG信息列表 > ZJOI2013
[ZJOI2013]K大数查询
权值线段树套线段树模板 区间每个可重集插入一个数 把权值放外边,内部维护区间 在权值线段树上二分,内部查询数量 \(\text{Code}\) #include <cstdio> #include <iostream> #define LL long long using namespace std; const int N = 5e4; int n, m, rt, seg_size, tr_size; struct[ZJOI2013]丽洁体
题目分析 首先分析一下题目,就是给定一个由单词组成的序列,然后,在给出三个字符串序列,要求如何组成 \(A...B...C\)的形式 先注意输入,如果采用不当的方法,就算下面的算法是正确的,也会超时,可以用 \(getchar\),再处理换行 然后,针对一个贪心的想法,找到\(A\)的最位置,然后依次寻找\(B,C\),这样P3335-[ZJOI2013]蚂蚁寻路【dp】
正题 题目链接:https://www.luogu.com.cn/problem/P3335 题目大意 给出 n × m n\times m n×m的网格,每个格子有权值。一个回路在格子[ZJOI2013]K大数查询
K大数查询 题解 整体二分板子题。 其实看到题目应该很容易想到整体二分的。 我们可以先二分答案,对于权值区间 [ l , r ]P3333 [ZJOI2013]丽洁体
想要一直爱着某物的话,以妖怪之生来说太长了; 想要实现一切梦想的话,以人类之生来说太短了。 写这题的动机只是这两句话= = 简述 原题面:Luogu 给定字符串 \(T,A,B,C\),每个字符串都由一些由空格分隔的单词构成。 求至少需要在 \(T\) 中删除多少单词,使得 \(T\) 呈现 \(A\cdots B\cdoZJOI2013 K大数查询
题目链接 Solution 首先另 L = -n, R = n,那么 mid = (L + R) >> 1.考虑对于 mid 把所有操作(修改 / 查询)分为两类:dl 和 dr,使得两部分互不干扰。 对于查询操作: 如果 c > mid,说明该询问的答案应该 < mid,因此把当前询问分入 dl 区间; 否则,说明 mid 这个值出现在右侧,说明当前询问的答案Luogu P3336 [ZJOI2013]话旧
一大早起来先做一道DP有助于清醒脑子 首先我们肯定考虑按\(x\)升序依次考虑每个点,容易发现因为题目中给的是极小值均为\(0\),那就意味着只要向下走就一定要碰到\(x\)轴 因此容易设计一个状态,\(f_{i,0/1}\)表示当前走到\(i\)点,从\(i-1\)走到\(i\)的路径最后是向上还是向下 考虑如何K大数查询[ZJOI2013]
【题目描述】 你需要维护 \(n\) 个可重整数集,集合的编号从 \(1\) 到 \(n\)。 这些集合初始都是空集,有 \(m\) 个操作: 1 l r c:表示将 \(c\) 加入到编号在 \([l,r]\) 内的集合中 2 l r c:表示表示查询编号在 \([l,r]\) 内的集合的并集(可重)中,第 \(c\) 大的数是多少。 【输入/输出格「ZJOI2013」K大数查询
「ZJOI2013」K大数查询 传送门 整体二分,修改的时候用线段树代替树状数组即可。 参考代码: #include <cstdio> #define rg register #define file(x) freopen(x".in", "r", stdin), freopen(x".out", "w", stdout) template < class T > inline void read(T&BZOJ 3110: [Zjoi2013]K大数查询 树套树 整体二分
title BZOJ 3110 LUOGU 3332 题意: 有 \(N\) 个位置, \(M\) 个操作。操作有两种,每次操作如果是: 1 a b c:表示在第 \(a\) 个位置到第 \(b\) 个位置,每个位置加上一个数 \(c\) ; 2 a b c:表示询问从第 \(a\) 个位置到第 \(b\) 个位置,第 \(c\) 大的数是多少。 analysis 看到题后就想到BZOJ 3112: [Zjoi2013]防守战线 ZKW费用流
title BZOJ 3112 LUOGU 3337 Description 战线可以看作一个长度为n 的序列,现在需要在这个序列上建塔来防守敌兵,在序列第i 号位置上建一座塔有Ci 的花费,且一个位置可以建任意多的塔,费用累加计算。有m 个区间[L1, R1], [L2, R2], …, [Lm, Rm],在第i 个区间的范围内要建至少Di 座塔[ZJOI2013]丽洁体
题目 还以为是序列自动机真是吓人 发现一个非常显然的事情,因为我们要的是\(A...B...C\),\(A\)一定要成为前缀,\(C\)一定要成为后缀,于是我们发现我们需要让\(A\)尽量靠前\(C\)尽量靠后 一是因为这样\(A\)和\(C\)去掉的位置尽量少,二来能留给\(B\)更多的空间 这里直接贪心就好了,先选择\([bzoj 3110] [ZJOI2013] K大数查询
题目链接: https://www.lydsy.com/JudgeOnline/problem.php?id=3110 题目: 有N个位置,M个操作。操作有两种,每次操作如果是: 1 a b c:表示在第a个位置到第b个位置,每个位置加上一个数c 2 a b c:表示询问从第a个位置到第b个位置,第C大的数是多少。 题解: 注意每一个位置加上一个数并不是数[ZJOI2013]K大数查询
[ZJOI2013]K大数查询 题目描述 有N个位置,M个操作。操作有两种,每次操作如果是: 1 a b c:表示在第a个位置到第b个位置,每个位置加上一个数c 2 a b c:表示询问从第a个位置到第b个位置,第C大的数是多少。 输入输出格式 输入格式: 第一行N,M接下来M行,每行形如1 a b c或2 a b c 输出格式BZOJ3110 [Zjoi2013]K大数查询
题意 有N个位置,M个操作。操作有两种,每次操作如果是1 a b c的形式表示在第a个位置到第b个位置,每个位置加入一个数c;如果是2 a b c形式,表示询问从第a个位置到第b个位置,第C大的数是多少。 N,M<=50000,N,M<=50000 分析 参照sengxian的题解。 一道树套树的题,外层是权值线段树,里层是普通区[ZJOI2013]K大数查询
Description: 给定一个序列,支持两种操作 1.在[L,R]的每个位置上加上一个数 (注意一个位置上有多个数) 2.查询[L,R]上所有数中的第K大 Hint: \(n,m<=5e4\) Solution: 一道很好的整体二分题,在值域上二分所有询问的答案,并在线段树上维护\(size\) 详见代码 #include<bits/stdc++.h> #defin