@codeforces - 674G@ Choosing Ads】的更多相关文章

目录 @description@ @solution@ @accepted code@ @details@ @description@ 给定长度为 n 的序列,m 次询问以及参数 p.共有两类询问: (1)"1 l r id":将区间 [l, r] 的颜色改成 id. (2)"2 l r":对于区间 [l, r],输出不超过 100/p 种颜色,要求在区间内占比超过 >= p% 的颜色都应该被输出. 点我查看原题. @solution@ 看了好几遍题意才看懂那…
Codeforces 题目传送门 & 洛谷题目传送门 首先考虑 \(p>50\) 的时候怎么处理,也就是求一个区间的绝对众数.我们知道众数这个东西是不能用线段树直接维护的,因为对于区间 \([l,r]\) 和 \(x\in [l,r)\),区间 \([l,r]\) 的众数不一定是 \([l,x]\) 的众数或 \([x+1,r]\) 的众数. 不过此题有一个特殊之处,就是我们要求区间的绝对众数而不是区间的众数.这时候就可以用线段树维护了,因为区间 \([l,r]\) 的绝对众数一定至少是区间…
CF643G Choosing Ads \(n\) 和 \(m\) 和 \(p\) 和序列 \(a_i(1\le i\le n)\).\(m\) 种如下操作: 1 l r id 令 \(i\in[l,r]:a_i=id\). 2 l r 输出至多 \(\lfloor\frac{100}{p}\rfloor\) 个数,其中包括所有 \([l,r]\) 区间内出现 \(\ge\lceil\frac{p(r-l+1)}{100}\rceil\) 次的 \(a_i\). 数据范围:\(1\le n,m,…
「CF643G」 Choosing Ads 传送门 如果你知道摩尔投票法可以扩展事实上是个一眼题,又好写又好调. 首先摩尔投票法是用来求众数定义为超过所有数个数一半的数的一个算法. 大致算法流程: 将第一个数其设为我们预选的众数,并给其一个权值 \(w=1\) 接下来,每当我们遍历一个数,若其与预选的众数相同,便使其权值加一,否则使其减一. 若预选的众数权值变为 \(0\),则将使其变为 \(0\) 的这个数设为预选的众数. 最后留下的数就是答案. 然后这东西显然可以通过线段树进行合并. 然后这…
题目链接:http://codeforces.com/contest/219/problem/D 树dp //#pragma comment(linker, "/STACK:102400000, 102400000") #include <algorithm> #include <iostream> #include <cstdlib> #include <cstring> #include <cstdio> #include…
http://codeforces.com/problemset/problem/219/D 题目大意: 给出一棵树,但是它的边是有向边,选择一个城市,问最少调整多少条边的方向能使一个选中城市可以到达所有的点,输出最小的调整的边数,和对应的点. 思路:先预处理一个点为根的代价,然后去dfs移动,总复杂度是O(n) #include<cstdio> #include<cmath> #include<algorithm> #include<cstring> #i…
Choosing Capital for Treeland time limit per test 3 seconds memory limit per test 256 megabytes input standard input output standard output The country Treeland consists of n cities, some pairs of them are connected with unidirectional roads. Overall…
题目链接:http://codeforces.com/contest/219/problem/D 题目大意: 给定一个n个节点的数和连接n个节点的n - 1条有向边,现在要选定一个节点作为起始节点,从这个点出发需要能走到其余每个节点,途中必然要调整有向边的方向,请求出当选定哪些节点作为初始节点时,所要调整的有向边最少,输出最小调整的边数和这些节点. 分析: Hint:城市结构是树型结构. 代码如下: #include <bits/stdc++.h> using namespace std; #…
http://codeforces.com/problemset/problem/219/D 题意 给一颗树但边是单向边,求至少旋转多少条单向边的方向,可以使得树上有一点可以到达树上任意一点,若有多个答案按顺序全部输出. 分析 把边的方向化为权值,正向为0,逆向为1.问题转化为找哪些点的在遍历全图后总权值最小.这就是树形DP了,它可以从子树收获价值,也可以从父亲收获.所以dfs两遍. 定义dp[u][0]为以u为根的的子树全可达的修改次数,随便选定一个点,用子节点信息更新父节点,dp[u][0]…
题目链接:http://codeforces.com/problemset/problem/219/D 题意: 给你一棵树,n个节点. 树上的边都是有向边,并且不一定是从父亲指向儿子的. 你可以任意翻转一些边的方向. 现在让你找一个节点,使得从这个节点出发能够到达其他所有节点,并保证翻转边的数量最小. 问你最少翻转多少条边,并输出所有满足此条件的节点编号. 题解: 本题要解两个dp: dp1 & dp2 首先考虑dp1: 表示状态: dp1[i]表示使节点i能够到达i的子树中的所有节点,翻转边的…