hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3)

 1 #include <stdio.h>
 2 #include <iostream>
 3 #include <cstdlib>
 4 #include <cmath>
 5 #include <string>
 6 #include <cstring>
 7 #include <algorithm>
 8 #include <stack>
 9 #include <queue>
10 #include <set>
11 #include <map>
12 #include <vector>
13 using namespace std;
14 typedef long long ll;
15 typedef unsigned long long ull;
16
17 #define Faster ios::sync_with_stdio(false),cin.tie(0)
18 #define Read freopen("in.txt", "r", stdin),freopen("out.txt", "w", stdout)
19 const int INF = 0x3f3f3f3f;
20 const int maxn = 1e7 + 5;
21
22 ll n, m, k, p, q, MOD, r;
23 ll a[maxn];
24 ll b[maxn];
25
26 int main()
27 {
28     Faster;
29     int T;
30     cin >> T;
31     while(T--){
32         cin >> n >> m >> k >> p >> q >> r >> MOD;
33         for(int i = 1;i <= n;i++){
34             if(i <= k){
35                 cin >> a[i];
36             }
37             else{
38                 a[i] = (p*a[i-1] + q*i + r)%MOD;
39             }
40         }
41         ll cnt, ans;
42         cnt = ans = 0;
43         for(int h = 1, t = 0, i = n;i >= 1;i--){
44             while(h <= t && a[b[t]] <= a[i]) t--;
45             b[++t] = i;
46             if(i+m-1 <= n){
47                 while(b[h] >= i+m) h++;
48                 ans += i^a[b[h]];
49                 cnt += i^(t-h+1);
50             }
51         }
52         cout << ans << " " << cnt << endl;
53     }
54     return 0;
55 }

原文地址:https://www.cnblogs.com/jaydenouyang/p/9393454.html

时间: 2024-11-09 11:30:22

hdu 6319 Problem A. Ascending Rating (2018 Multi-University Training Contest 3)的相关文章

HDU 6319 Problem A. Ascending Rating(单调队列)

要求一个区间内的最大值和每次数过去最大值更新的次数,然后求每次的这个值异或 i 的总和. 这个序列一共有n个数,前k个直接给出来,从k+1到n个数用公式计算出来. 因为要最大值,所以就要用到单调队列,然后从后往前扫一遍然后每次维护递减的单调队列. 先把从n-m+1以后开始的数放进单调队列,这时候先不操作,然后剩下的数就是要异或相加的数,然后每次的队首元素就是这个区间内的最大值,这个队列里的元素个数,其实就是更新到最大值的逆过程,也就是最大值需要更新的次数. #include<map> #inc

HDU 2018 Multi-University Training Contest 3 Problem A. Ascending Rating 【单调队列优化】

任意门:http://acm.hdu.edu.cn/showproblem.php?pid=6319 Problem A. Ascending Rating Time Limit: 10000/5000 MS (Java/Others)    Memory Limit: 524288/524288 K (Java/Others)Total Submission(s): 5943    Accepted Submission(s): 2004 Problem Description Before

2018 Multi-University Training Contest 3 1001 / hdu6319 Problem A. Ascending Rating 单调队列,思维

Problem A. Ascending Rating 题意: 给定一个序列a[1..n],对于所有长度为m的连续子区间,求出区间的最大值以及从左往右扫描该区间时a的最大值的变化次数. 1≤m≤n≤107. Shortest judge solution: 534 bytes 题解: 官方题解:按照r从m到n的顺序很难解决这个问题.考虑按照r从n到m的顺序倒着求出每个区间的答案.按照滑窗最大值的经典方法维护a的单调队列,那么队列中的元素个数就是最大值的变化次数.时间复杂度O(n). 最大值好算,

HDU 4870 Rating(概率、期望、推公式) &amp;&amp; ZOJ 3415 Zhou Yu

其实zoj 3415不是应该叫Yu Zhou吗...碰到ZOJ 3415之后用了第二个参考网址的方法去求通项,然后这次碰到4870不会搞.参考了chanme的,然后重新把周瑜跟排名都反复推导(不是推倒)四五次才上来写这份有抄袭嫌疑的题解... 这2题很类似,多校的rating相当于强化版,不过原理都一样.好像是可以用高斯消元做,但我不会.默默推公式了. 公式推导参考http://www.cnblogs.com/chanme/p/3861766.html#2993306 http://www.cn

HDU 5348 MZL&#39;s endless loop(思想用的是深搜)经典

MZL's endless loop Time Limit: 3000/1500 MS (Java/Others)    Memory Limit: 131072/131072 K (Java/Others) Total Submission(s): 1343    Accepted Submission(s): 282 Special Judge Problem Description As we all kown, MZL hates the endless loop deeply, and

HDU 4906 Our happy ending(2014 Multi-University Training Contest 4)

题意:构造出n个数 这n个数取值范围0-L,这n个数中存在取一些数之和等于k,则这样称为一种方法.给定n,k,L,求方案数. 思路:装压 每位 第1为表示这种方案能不能构成1(1表示能0表示不能)  第2为表示能不能构成2 ...  这样用d[1<<n] 的DP  像背包那样背 n次就可以 最后状态中第k位为1的就可以加上方法数. #include<cstring> #include<cstdio> #include<cmath> #include <

HDU 4888 Redraw Beautiful Drawings(2014 Multi-University Training Contest 3)

题意:给定n*m个格子,每个格子能填0-k 的整数.然后给出每列之和和每行之和,问有没有解,有的话是不是唯一解,是唯一解输出方案. 思路:网络流,一共 n+m+2个点   源点 到行连流量为 所给的 当前行之和.    每行 连到每一列 一条流量为  k的边,每列到汇点连 列和.如果流量等于总和则有解,反之无解(如果列总和不等于行总和也无解).  判断方案是否唯一 找残留网络是否存在长度大于2的环即可,有环说明不唯一. #include<cstdio> #include<cstring&

UVA11991 Easy Problem from Rujia Liu?(第K个V的位置)

Easy Problem from Rujia Liu? Time Limit:1000MS     Memory Limit:0KB     64bit IO Format:%lld & %llu Description Easy Problem from Rujia Liu? Though Rujia Liu usually sets hard problems for contests (for example, regional contests like Xi'an 2006, Bei

hdu 1800 Flying to the Mars(简单模拟,string,字符串)

题目 又来了string的基本用法 //less than 30 digits //等级长度甚至是超过了int64,所以要用字符串来模拟,然后注意去掉前导零 //最多重复的个数就是答案 //关于string的修改增加的用法 #include <cstdio> #include<iostream> #include <cstring> #include <algorithm> #include<string> using namespace std