HDU 6319】的更多相关文章

链接: http://acm.hdu.edu.cn/showproblem.php?pid=6319 思路: 单调队列倒着维护,队列里面剩下的值的数量就是这一段区间的count值,如样例第一个区间:3 2 2 1 5 7 单调队列倒着维护遍历一遍变成了:7 5 3 长度为3,队首为最大值7 实现代码: #include<cstdio> using namespace std; #define ll long long ; ll a[M],p,q,r,mod; ll n,m,k; ll lis[…
http://acm.hdu.edu.cn/showproblem.php?pid=6319 从后往前更新,维护一个递减单调栈(队列) 最近很多题都是单调栈... #define _CRT_SECURE_NO_WARNINGS #include<cstdio> #include<algorithm> #include<queue> #include<iostream> //#include<deque> using namespace std;…
2018 Multi-University Training Contest 3 6319.Problem A. Ascending Rating 题意就是给你长度为k的数列,如果数列长度k<n,就利用一个构造数列的方法构造数列使数列长度为n. 然后求定长区间为m的数列中最大值是几,最大值是第几次更新maxnum得到的,得到所有结果之后,用一个求和的公式将结果输出来,具体题意自己翻译. 滑窗问题,单调队列可以解决.关于滑窗问题和单调队列,具体的自行百度. 对于这个题,倒着遍历数列才能既找到最大值…
题目传送门//res tp hdu 维护递增单调队列 根据数据范围推测应为O(n)的. 我们需要维护一个区间的信息,区间内信息是"有序"的,同时需要在O(1)的时间进行相邻区间的信息转移. 若是主数列从头到尾转移无法有解题突破口,就反过来从尾到头再思考. #include<iostream> #include<cstdio> #include<algorithm> #include<cstring> #define rep(i,a,b)…
要求一个区间内的最大值和每次数过去最大值更新的次数,然后求每次的这个值异或 i 的总和. 这个序列一共有n个数,前k个直接给出来,从k+1到n个数用公式计算出来. 因为要最大值,所以就要用到单调队列,然后从后往前扫一遍然后每次维护递减的单调队列. 先把从n-m+1以后开始的数放进单调队列,这时候先不操作,然后剩下的数就是要异或相加的数,然后每次的队首元素就是这个区间内的最大值,这个队列里的元素个数,其实就是更新到最大值的逆过程,也就是最大值需要更新的次数. #include<map> #inc…
题意:给定一个序列a[1..n],对于每个长度为m的连续子区间,求出区间的最大值和从左往右扫描该区间最大值的变化次数. 分析:先O(n)处理出整个序列的值.求出每个长度为m的连续区间中的最大值可以用单调队列求出,但同时要维护区间最大值的变化次数,即以区间最左边的元素为最小值的递增序列的长度.如果单纯地从左往右更新单调队列的话,每次窗口的最左端出队列后,队列中的单调特性就又被打破,而这时要重新确定这个递增序列,就必须重新遍历一遍队列中的元素,肯定超时. 换个思路,如果我们从右往左滑动这个窗口,那么…
#include <stdio.h> #include <iostream> #include <cstdlib> #include <cmath> #include <string> #include <cstring> #include <algorithm> #include <stack> #include <queue> #include <set> #include <…
[链接] 我是链接,点我呀:) [题意] 给你一个长为n的数组a 让你对于每个长度为m的窗口. 算出其中的最大值以及从左往右遍历的时候这个最大值更新的次数. [题解] 单调队列. 从后往前滑动窗口. 会发现我们维护以这个窗口里面的值为元素的单调队列的时候. 这个单调队列的长度就是最大值更新的次数. 因为我们把a[i]加入队列的时候. 队列尾巴上,小于等于这个a[i]的元素都会被删掉. 每个都这么做的话. 队列里面的元素就和更新时候的元素对应. 最大值就是队列的头部. 少做一些取余操作.不然会超时…
题意略. 思路:倒着使用单调队列,大的放在前,小的放在后. 详见代码: #include<bits/stdc++.h> using namespace std; typedef long long LL; ; LL a[maxn]; int n,m,k; LL p,q,r,mod; int que[maxn],head,tail; LL ans[maxn]; LL generator(int i){ ]) % mod + q * i % mod + r) % mod; } int main()…
2018 HDU多校第三场赛后补题 从易到难来写吧,其中题意有些直接摘了Claris的,数据范围是就不标了. 如果需要可以去hdu题库里找.题号是6319 - 6331. L. Visual Cube 题意: 在画布上画一个三维立方体. 题解: 模拟即可. 代码: #include <bits/stdc++.h> using namespace std; int a, b, c, R, C; char g[505][505]; int main () { int T; cin >>…