【UOJ#169】元旦老人与数列】的更多相关文章

传送门 线段树好题. 维护区间加,区间取最大值,维护区间最小值,历史区间最小值. 同样先考虑不用维护历史区间最小值的情况,这个可以参考这道题的解法,维护区间最小和次小值可以解决前两个操作,然后使用历史标记的常规维护方式合并标记更新就行了. 代码: #include<bits/stdc++.h> #define lc (p<<1) #define rc (p<<1|1) #define mid (T[p].l+T[p].r>>1) #define N 5000…
论文题. 考虑到这题的维护和区间操作是反向的,也就是说无法像V那题快速的合并标记. 我们知道,一个区间的最小值和其他值是可以分开来维护的,因为如果一个区间被整体覆盖,那么最小值始终是最小值. 对于被覆盖一半的区间,讨论一下即可. 对于每个最小值和次小值记录前缀最小值,当前/历史最小值,当到达合法区间的时候: 如果区间最小值>x,直接退出. 如果minv[o]<x<semn[o],那么更新当前的次小值 反之继续向下. #include<bits/stdc++.h> ; ; us…
题意:http://uoj.ac/problem/169 sol  :线段树..........蜜汁TLE了一个点,不管了..... 代码抄snowMyDream的,orz........... 线段树需要维护以下奇奇怪怪的一堆东西...... 区间最小值及其lazy标记 区间严格次小值及其lazy标记 最小值.严格次小值lazy标记的前缀和,历史最小值 dalao的博客说了一堆势能之类的东西我也没看懂.......我是看代码才明白的QAQ #include<iostream> #includ…
http://uoj.ac/problem/168 没想到是网络流 官方题解地址 http://jiry-2.blog.uoj.ac/blog/1115 subtask2告诉我们度数为012的点对答案无影响 subtask3告诉我们原图\(|E| > 2|V| - 2\)时不是丛林的 证明一个结论 若对于原图所有的子图都满足\(|E| \le 2|V| - 2\)则是一个丛林 对子图大小施归纳法 \(n = 1\)是丛林 当\(n \geq 2\)时 设当前图度数最小的节点为\(u\) 仅讨论\…
传送门 考虑用 \(segment~tree~beats\) 那一套理论,维护区间最小值 \(mn\) 和严格次小值 \(se\) 那么可以直接 \(mlog^2n\) 维护前三个操作 考虑维护历史最小值,先维护历史最小标记 写了写发现 \(max\) 那个修改不好操作 对于 \(max\) 操作来说,只会在 \(mn< v <se\) 的时候打上标记 这就相当于区间内等于 \(mn\) 的权值都要变成 \(v\) 那么 \(max\) 操作就可以变成对区间最小值的加法操作 而 \(v<…
题目大意:给你一个有$n$个盘子的汉诺塔状态$S$,问有多少种不同的操作方法,使得可以在$m$步以内到达状态$T$.$n,m\leqslant100$ 题解:首先可以知道的是,一个状态最多可以转移到其他的$3$个状态,然后发现若$m\leqslant100$的话,每个柱子最多移动$7$个盘子,所以最多状态只有$3^{21}$次,这个数可能有点大,但是通过更严密的分析的话,最后状态数只有$10^5$级别,可以通过记忆化搜索通过. 卡点:妈啊,我怎么又把柱子上的顺序弄反了 C++ Code: #in…
http://uoj.ac/problem/52 题意:每次可以得到3个序列中 思路:每次分别取出三个序列的K/3长度的位置,取最小的那个,然后每次减掉它,总复杂度是Nlog3N #include "kth.h" #include<algorithm> ]; int query_kth(int n_a, int n_b, int n_c, int k) { int Len=k; ,lb=,lc=; ; ){ ,vb=,vc=; ,n_a-la+); ,n_b-lb+); ,…
题目:http://uoj.ac/contest/23/problem/167 如果我们拿个map来存状态的话.设当前状态是v,下一个状态是s.有f[i+1][s]+=f[i][v]. 初始f[0][S]=1 答案就是∑f[i][T] (说起来只要用了map这题也就不难啊TAT... #include<string> #include<iostream> #include<algorithm> #include<cstdio> #include<que…
QwQ太懒了,题目直接复制uoj的了 QwQ这个题可以说是十分玄学的一道题了 首先可以暴搜,就是\(dfs\)然后模拟每个过程是哪个柱子向哪个柱子移动 不多解释了,不过实现起来还是有一点点难度的 直接上代码吧 #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #include<cmath> #include<queue> using na…
传送门 线段树好题. 维护区间取两种最值,区间加,求区间两种历史最值,区间最小值. 自己的写法调了一个晚上+一个上午+一个下午+一个晚上并没有调出来,90" role="presentation" style="position: relative;">9090分弃疗. 于是我开始学习新的写法. 也就是封装再封装. 然后发现自己的方法的确有不严谨的地方,但并不好改,于是写了一个凌晨参考了xuyixuan" role="presen…
[UOJ#51][UR #4]元旦三侠的游戏(博弈论) 题面 UOJ 题解 考虑暴力,\(sg[a][b]\)记录\(sg\)函数值,显然可以从\(sg[a+1][b]\)和\(sg[a][b+1]\)推过来. 发现可以从\(sg[a][b]\)推到\(sg[a][b+1]\)的值很少,所以可以直接把这些值全部提前计算出来,这部分大概有\(\sqrt n\)个,剩下的可以推到\(sg[a+1][b]\)而不能推到\(sg[a][b+1]\)的位置可以通过\(a\)以及最大的满足\(x^b\le…
题目链接:UOJ - 51 据说这题与 CF 39E 类似. 题目分析 一看题目描述,啊,博弈论,不会!等待爆零吧... 这时,XCJ神犇拯救了我,他说,这题可以直接搜啊. 注意!是用记忆化搜索,状态为 (a, b) . 是这样的:我们从后面倒着推,对于一个无法再增加 a 或 b 的 (a, b) 状态,当前走的人必败.这是终止的状态. 而对于一个不是终止状态的状态 (a, b) ,可能有两种后继状态 (a + 1, b) || (a, b + 1) ,我们递归先求出这两个后继状态是必败还是必胜…
题目描述 给出一个的数列,将其重新排列,使得其等差子序列的数目最小.输出一种可能的排列后的数列. 题解 构造 那天和 EdwardFrog 讨论 bzoj2124 的构造时突然有的灵感,最后发现就是这道题... 通过构造可以使得不存在长度为3的等差子序列. 考虑:如果把所有奇数放到所有偶数的左面,那么就不会出现 “奇-偶-奇” 或 “偶-奇-偶” 的情况. 对于 “奇-奇-奇” 或 “偶-偶-偶” 的情况,将所有 $a_i$ 变为 $\lfloor\frac{a_i}2\rfloor$ 不影响判…
题目链接 \(Description\) 交互库中有三个排好序的,长度分别为\(n_a,n_b,n_c\)的数组\(a,b,c\).你需要求出所有元素中第\(k\)小的数.你可以调用至多\(100\)次询问某个数组中的第几个数的函数. \(n_a,n_b,n_c\leq 10^5\). \(Solution\) 显然的做法是先枚举这个数在哪个数组中,再在三个数组中二分.这个次数是\(log^2\)的. 我们如果每次确定一些数比第\(k\)个数小,那我们可以直接将这些数删掉. (可以假设数组是无限…
题目描述 给出 $n$ 和 $m$ ,$m$ 次询问.每次询问给出 $a$ 和 $b$ ,两人轮流选择:将 $a$ 加一或者将 $b$ 加一,但必须保证 $a^b\le n$ ,无法操作者输,问先手是否必胜. $n\le 10^9$ ,$m\le 10^5$ ,$a\ge 2$ ,$b\ge 1$ ,$a^b\le n$ 题解 博弈论+dp 显然可以想到预处理 $f[i][j]$ 表示 $a$ 为 $i$ ,$b$ 为 $j$ 时先手能否胜利.显然由 $f[i+1][j]$ 和 $f[i][j+…
题目大意:交互题,给你三个有序数组,长度分别为$n\_a,n\_b,n\_c$,都不超过$10^5$.三个函数$get\_a(i),get\_b(i),get\_c(i)$,分别返回$a_i,b_i,c_i$. 现在要你编写一个函数$query\_kth()$,求出三个数组中第$k$大的元素. 题解:每次求$\Big\lfloor\dfrac k 3\Big\rfloor$的$a,b,c$,把最小的舍去 卡点:下标移动时写错 C++ Code: #include "kth.h" #in…
题目大意:给$n$,一个游戏,给$a,b$,两个人,每人每次可以把$a$或$b$加一,要求$a^b\leqslant n$,无法操作人输.有$m$次询问,每次给你$a,b$,问先手可否必胜 题解:令$f_{i,j}$表示$a=i,b=j$使得胜负,$f_{i,j}$可由$f_{i+1,j},f_{i,j+1}$推出,但这样会$MLE(b=1)$,发现若$a>\sqrt n$,可以直接奇偶性判断. 卡点:原来写的东西不知道为什么锅,换成题解的方式就过了 C++ Code: #include <c…
题意 给出三个已经排好序的数组$a, b, c$ 在$100$次询问内找出第$k$小的元素 Sol 一种很显然的$log^2n$的做法:首先在$a$中二分,然后再$b,c$中二分.这样可以得到$60$分的好成绩. 然而这算法就没什么优化的空间了... 考虑另一种做法. 我们每次对三个数组询问第$\frac{3}{k}$个数. 然后我们可以直接把最小对应的那一段抛弃.正确性显然吧.或者你可以考虑一下最坏情况 那么$k$就缩小了$\frac{1}{3}$ 算一下,查询次数不会超过$99$. 具体可以…
Code: #include "kth.h" #include<iostream> int minn(int x,int y){return x<y?x:y;}; int query_kth(int n_a, int n_b, int n_c, int k) { int pa=0,pb=0,pc=0,tmin; while(k) { int l=(k-2)/3; int t1=get_a(pa+l); int t2=get_b(pb+l); int t3=get_c(…
169. Majority Element Given an array of size n, find the majority element. The majority element is the element that appears more than ⌊ n/2 ⌋ times. You may assume that the array is non-empty and the majority element always exist in the array. 找出数列中个…
[BZOJ3671][UOJ#6][NOI2014]随机数生成器 试题描述 小H最近在研究随机算法.随机算法往往需要通过调用随机数生成函数(例如Pascal中的random和C/C++中的rand)来获得随机性.事实上,随机数生成函数也并不是真正的“随机”,其一般都是利用某个算法计算得来的. 比如,下面这个二次多项式递推算法就是一个常用算法: 算法选定非负整数x0,a,b,c,d作为随机种子,并采用如下递推公式进行计算. 对于任意i≥1,xi=(ax2i−1+bxi−1+c)mod d . 这样…
题意:维护一个数列,每个元素是个二维向量,每次可以在后面加一个元素或者删除一个元素.给定P(x,y),询问对于[l,r]区间内的元素$S_i$,$S_i \times P$的最大值是多少. 首先简单地推出类似斜率优化的式子,那么我们需要在凸包上二分. 学习了一下这份代码http://uoj.ac/submission/69959 使用线段树按下标维护凸包.那么这里有一个问题,如果按照传统的写法,合并一次的复杂度是与$O(区间长度)$的,这样会导致单次插入/删除的时间复杂度变为$O(n)$,是不能…
需要锻炼$ DP$能力 UOJ #311 题意 等概率产生一个长度为$ n$且每个数在[1,n]间随机的数列 定义其价值为所有长度为$ k$的连续子数列的最大值的乘积 给定$ n,k$求所有合法数列的价值和 题解 设$ f(x,y)$表示长度为$x$的数列中,最值不超过$ y$的所有数列的价值和 若数列的最值不是$ y$则$ f(x,y)=f(x,y-1)$ 否则枚举最左边的最值位置,设为位置$ i$ 则$ f(x,y)$可由$f(i-1,y-1)·w(y)^{calc(i)}·f(x-i,y)…
题目链接: http://www.lydsy.com/JudgeOnline/problem.php?id=4574 http://uoj.ac/problem/196 考虑数字随机并且值域够大,我们将元素离散化并且不需要去重. 令$g[i]$表示每一个位置的期望大小. 那么${Ans=\sum (g[i]*(\frac{n(n+1))}{2})^{q})}$ 考虑根据这个${(\frac{n(n+1))}{2})^{q}}$转换一下问题,是不是可以变成: -------------------…
https://acm.sjtu.edu.cn/OnlineJudge/problem/1022 Description 定义Fib数列:1,1,2,3,5,8,13,…1,1,2,3,5,8,13,… 求第NN项除以20102010的余数 Input Format 输入仅一行,为一个整数NN Output Format 输出仅一行,为第NN项除以20102010的余数 Sample Input 3 Sample Output 2 Limits: 对于70%的数据 N≤1,000,000N≤1,…
链接:http://uoj.ac/problem/52 刚刚越过绝境长城,只见天空中出现了炫目的光芒 —— 圣诞老人出现了. 元旦三侠立刻进入战斗.生蛋侠.圆蛋侠和零蛋侠分别有 na,nb,ncna,nb,nc 个激光炮.生蛋侠的激光炮的威力分别为 a0,a1,…,ana−1a0,a1,…,ana−,圆蛋侠的激光炮的威力分别为 b0,b1,…,bnb−1b0,b1,…,bnb−,零蛋侠的激光炮的威力分别为 c0,c1,…,cnc−1c0,c1,…,cnc−. 元旦三侠的激光炮的威力已经按从小到大…
get到了标记永久化 sylvia 是一个热爱学习的女孩子,今天她想要学习数据结构技巧. 在看了一些博客学了一些姿势后,她想要找一些数据结构题来练练手.于是她的好朋友九条可怜酱给她出了一道题. 给出一个长度为 nn 的数列 AA,接下来有 mm 次操作,操作有三种: 对于所有的 i∈[l,r]i∈[l,r],将 AiAi 变成 Ai+xAi+x. 对于所有的 i∈[l,r]i∈[l,r],将 AiAi 变成 ⌊Ai−−√⌋⌊Ai⌋. 对于所有的 i∈[l,r]i∈[l,r],询问 AiAi 的和…
[UOJ#278][UTR #2]题目排列顺序 试题描述 “又要出题了.” 宇宙出题中心主任 —— 吉米多出题斯基,坐在办公桌前策划即将到来的 UOI. 这场比赛有 n 道题,吉米多出题斯基需要决定这些题目的难度,然后再在汪洋大海中寻找符合该难度的题目. 题目的难度可以用一个 1 到 n 的排列 a1,…,an 表示,其中 ai 表示第 i 道题目在这 n 道题目中是第 ai 简单的题目,即恰有 ai−1 道题目比第 i 道题目简单. 经验丰富的吉米多出题斯基早就悟出了一种科学地决定难度顺序的方…
Preface 本着刷遍(只刷一遍)各大OJ的原则我找到了一场UOJ的比赛 无奈UOJ一般的比赛难度太大,我就精选了UER中最简单的一场打了一下,就当是CSP前的练习吧 A. [UER #5]万圣节的南瓜灯 一看就是要搞个结论的题目.首先我们看出来所有没有坏的格子要形成一棵树 那么对于\(n,m\le 1000\)的数据我们直接暴力连边并查集判断即可 然后考虑\(n,m\)较大时怎么做,我们发现树一定满足边数+1=点数,换句话说就是边数小于点数 那么我们容易发现对于\(2nm-m-4K<nm-k…
using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.Threading.Tasks; namespace 斐波那契数列求和 { class Program { static void Main(string[] args) { Console.WriteLine()); Console.WriteLine()); Console.WriteLine()…