
ACM比赛题解
比赛
0iq2333
欢迎访问我的个人主页:0iq2333.github.io
展开
-
2021hdu多校1 Xor sum(字典树)
**题意:**给你一串数组a,问连续区间异或和<=k的区间,输出这个区间的范围L,R,要求这个区间最小,如果区间相同,则输出L最小的那一个。 题解: 根据性质b^b=0,所以xor_sum[i,j] = xor_sum[1,i-1] ^ xor_sum[1,j],所以用前缀异或和进行维护。 前缀异或和,我们先在字典树进行查询当前1-i区间异或和,在查找的时候,我们进行判断是否大于等于K,然后存入最小的下标。 在查询过后,在将当前异或和插入到字典树中。这样就能完成O(nlogn)的全部扫描了。 cod原创 2021-07-22 21:06:46 · 256 阅读 · 1 评论 -
2021hdu多校1 Maximal submatrix(单调栈+简单dp)
**题意:**给你一个数字矩阵,让你找一个子矩阵,使其满足每一列是非递减的,输出最大的子矩阵的面积。 题解: 我们根据每一列进行非递减的dp,得到dp是以当前点为结尾的最大非降子序列。 然后根据我蓝书中一道单调栈的题(传送门),我们可以将每一行的dp当做矩形的高,矩形的宽为1,直接单调栈即可完成计算 code: #include <bits/stdc++.h> using namespace std; typedef long long ll; const double PI = acos原创 2021-07-22 20:52:18 · 215 阅读 · 0 评论 -
2021牛客多校 Stack(思维+构造)
**题意:**单调栈中先放数,然后计算出栈的大小存入b数组。现在给你b的部分数组,然后让你还原出一种a数组。 题解: 一开始我想了个假算法,把队友带飞了 我们从1-n开始构造b数组,如果没有给定b,则直接插入到当前栈中,及b[i] = b[i-1] + 1 并且根据b数组单调的关系,我们可知b[i] > b[i-1] + 1 的话,这样就中间肯定没有足够的数字进行填充,所以直接输出-1 我是写了个线段树维护区间第k小,然后取出,这样来进行构造a数组 code: #include <bits/原创 2021-07-22 20:41:25 · 182 阅读 · 0 评论 -
2021牛客多校 Find 3-friendly Integers(思维)
**题意:**数的个个位拆分组成的数字能被3整除,则就+1, 问你从L到R中所有数中,有多少数符合当前定义。 题解: 因为是%3的关系,所以,数总共有3中状态0,1,2 当是3位数的时候,包含0的全符合题意 不包含0的数,111,112,122,222这种都符合定义,所已推广到4位的时候,我们可以看成是1+3位,所以4位的全符合 所以我们暴力1-100范围,然后分块,其余都可以满足条件 code: /* * @Author: 0iq * @LastEditTime: 2021-07-17 18:06原创 2021-07-22 20:26:59 · 174 阅读 · 0 评论 -
2021牛客多校 Journey among Railway Stations(线段树)
题意: 一段路有n个点,每个点有一个合法区间[ui,vi],然后相邻两点之间有一个长度,问从i出发,走到j,是否使能经过每个点。有两种修改操作,修改合法区间[ui,vi],相邻点之间的长度。 题解: ...原创 2021-07-22 20:19:45 · 235 阅读 · 0 评论