fjwc2019 D2T2 定价 (栈+set+贪心)】的更多相关文章

#182. 「2019冬令营提高组」定价 先瞄下数据范围 对于所有数据,1≤n≤1000,1≤m≤10^9,1≤q≤500000 .\textbf{2 操作的个数不超过 1000.} $10^9$位,看起来挺吓人,咋维护每个可以为1的位鸭? 再仔细看看,$q<=500000$,最多500000次操作,那么显然是对每一列,开个动态开点线段树或者平衡树维护. 本题对数据结构要求不高,于是我们可以快捷地用set代替辣 接下来我们考虑如何求出价格和的最小值 2 操作的个数不超过 1000. 这告诉我们可…
题目传送门 传送门I 传送门II 题目大意 双栈排序,问最小字典序操作序列. 不能发现两个数$a_{j}, a_{k}\ \ (j < k)$不能放在同一个栈的充分必要条件时存在一个$i$使得$j < k < i$且$a_{i} < a_{j} < a_{k}$. 证明?写个dfs就证完了(就是考虑任意一个三元组). 然后可建图,对于满足上面条件的$(j, k)$,$j$和$k$连一条无向边. 显然必要条件时图不存在奇环,即能够二分染色. 再证明一下这是必要条件. 我们先构造…
题意 题目链接 Sol 首先不难想到一种贪心策略:能弹则弹,优先放A 然后xjb写了写发现只有\(40\),原因是存在需要决策的情况 比如 \(A = {10}\) \(B = {8}\) 现在进来一个\(7\),看上去很难判断\(7\)到底放在哪里,如果放\(A\),后面来个\(9\),再来个\(6\),我们就凉了. 但是如果先来的是\(6\),且此时已经排完了\(1-5\),那么我们可以在后续操作中把\(7\)弄走 仔细想想不难发现,\(7\)不能放在\(A\)中,当且仅当存在一个位置\(K…
正解:贪心+二分图匹配 解题报告: 传送门$QwQ$ 跪了,,,我本来以为我$NOIp$做得差不多了,,,然后康了一眼发现没做多少啊其实$QAQ$ 然后来康题趴$QwQ$ 首先考虑如果只有一个栈的情况?就说如果存在$i<j<k$且$p_k<p_i<p_j$就$GG$了 现在发现有两个栈?就变成划分成两个序列使序列中不存在这个情况?于是显然考虑二分图染色昂$QwQ$如果染色失败说明无解呗. 然后判完无解就考虑输出方案?这个显然就贪心呗. 首先分配栈这个,显然是优先前面的到第一个栈,所…
\(Sol\) 先考虑单栈排序,怎么样的序列可以单栈排序呢?设\(a_i\)表示位置\(i\)是哪个数.\(\exist i<j<k\),都没有\(a_k<a_i<a_j\),这样的序列才可以单栈排序. 再来考虑双栈排序,如果把这个序列划分为两个子序列,这两个子序列分别可以单栈排序,那么这个序列就可以双栈排序了. 怎么划分子序列呢?预处理一个后缀最小值\(f_i=min_{j=i}^na_j\),若\(i<j\)且\(f_{j+1}<a_i<a_j\),那么说明\…
#194. 「2019冬令营提高组」密文 设$s[i]$表示前$i$个密文的异或和 容易发现,只要知道$s[0]~s[n](s[0]=0)$就可以知道每一位的值. 转化一下,就变成了在完全图上求最小生成树,边权是$[l,r]$段的异或和 然鹅数据范围太大了...... 但是边权是特殊的异或和! 于是我们用一棵trie维护边权,每次用贪心的思想 对于树上的某点,用最小的代价合并代表左右两个子树的连通块. 合并时代价的计算直接暴力就好辣 可以证明每次的连通块数都减少一半 即复杂度为$O(nlognl…
#184. 「2019冬令营提高组」签到题 每次询问接近O(1).......考虑贪心 怎么贪心呢? 对于相邻的两个数,我们要保证异或x后单调不降 我们找到两个数二进制上最高的相异位 当左边的数相异位为0,右边为1时,显然x的该位只能为0,否则异或后不符条件. 当左边的数相异位为1,右边为0时,x的该位就必须为1,也就是必须异或一次改变大小关系. 对于剩下的位......取0就行辣 当某位既要取1又要取0,显然就是不符合条件,就是无解了 每次修改的时候把上一位的数据清掉就得了. #include…
#include <cstdio> #include <queue> #include <cstring> #include <iostream> #include <algorithm> #include <stack> using namespace std; typedef long long ll; struct node{int v, id;}; stack<node>q, sq; int main(){ int…
前言 最近学了数位DP,感觉挺简单又实用.这道题就比较水,可以用300B的贪心过掉-网上似乎大多是贪心的题解,我就写写DP的做法 题意 给出正整数区间[L,R][L,R][L,R],定义荒谬值为 (去掉后导零的数的长度)*2-[去掉后导零之后末位为5].求荒谬值最小的数.若有多个则输出最小值. 状态定义为 (i,s,cnt0,flg,fl,fr)(i,s,cnt0,flg,f_l,f_r)(i,s,cnt0,flg,fl​,fr​) int iint\ iint i:表示当前在第 iii 位(最…
描述 Given an N-digit number, you should remove K digits and make the new integer as large as possible. 输入 The first line has two integers N and K (1 ≤ K<N≤500000).The next line has a N-digit number with no leading zero. 输出 Output the largest possible…