点进去发现并不是博弈QAQ

一开始考虑单调队列什么乱七八糟的发现根本做不出来

(没错我一直在想枚举最大值求次大值QAQ

不妨换个思路:

我们考虑枚举次大值求最大值

设当前为now,

设now之前第一个比他大的数的位置为L1,L1之前第一个比他大的数的位置为L2

设now之后第一个比他大的数的位置为R1,R1之前第一个比他大的数的位置为R2

那么对于now而言,其作为次大值存在的区间

1、左端点在[L2+1,L1]之间,右端点在[now,R1-1]之间

2、左端点在[L1+1,now]之间,右端点在[R1,R2-1]之间

这也就是说我们可以O(1)的算每个位置的贡献

具体求L1,L2,R1,R2的做法如下:

我们先对于数据做一遍桶排序(注意相同的数位置越小优先级越高)

之后维护一个链表,从小到大枚举数,每枚举一个删掉一个

链表中的L1,L2,R1,R2就是上述的L1,L2,R1,R2

  1. #include<cstdio>
  2. #include<cstring>
  3. #include<cstdlib>
  4. #include<iostream>
  5. #include<algorithm>
  6. using namespace std;
  7.  
  8. const int maxn=10000010;
  9. const int mod=1000000007;
  10. typedef long long LL;
  11. int n,A,B,p;
  12. int a[maxn],b[maxn];
  13. int t[maxn];
  14. int next[maxn],pre[maxn];
  15. int L1,R1,L2,R2;
  16.  
  17. void del(int now){
  18. next[pre[now]]=next[now];
  19. pre[next[now]]=pre[now];
  20. }
  21.  
  22. int main(){
  23. scanf("%d%d%d%d%d",&n,&a[0],&A,&B,&p);
  24. for(int i=1;i<=n;++i)a[i]=(1LL*A*a[i-1]+B)%p,t[a[i]]++;
  25. for(int i=1;i<p;++i)t[i]+=t[i-1];
  26. for(int i=n;i>=1;--i)b[t[a[i]]--]=i;
  27. for(int i=1;i<=n;++i)next[i]=i+1,pre[i]=i-1;
  28. pre[0]=0;next[n+1]=n+1;
  29. LL ans=0;
  30. for(int i=1;i<=n;++i){
  31. int now=b[i];
  32. L1=pre[now];R1=next[now];
  33. L2=pre[L1];R2=next[R1];
  34. ans=ans+1LL*a[L1]*a[now]%mod*(L1-L2)%mod*(R1-now)%mod;
  35. if(ans>=mod)ans-=mod;
  36. ans=ans+1LL*a[R1]*a[now]%mod*(R2-R1)%mod*(now-L1)%mod;
  37. if(ans>=mod)ans-=mod;
  38. del(now);
  39. }printf("%lld\n",ans);
  40. return 0;
  41. }

  

51Nod 算法马拉松12 移数博弈的更多相关文章

  1. 51nod算法马拉松12

    A 第K大区间 不妨考虑二分答案x,则问题转化成计算有多少个区间满足众数出现的次数>=x. 那么这个问题我们使用滑动窗口,枚举右端点,则左端点肯定单调递增,然后维护一个简单的数组就能资瓷添加元素 ...

  2. 51NOD 算法马拉松12

    OTZ做出题目的神犇..断断续续改完了在这里存一下思路吧 A题:第K大区间题意:定义一个区间的值为其众数出现的次数.现给出n个数,求将所有区间的值排序后,第K大的值为多少. 分析:二分答案mid,任务 ...

  3. 51Nod 算法马拉松12 Rikka with sequences

    当时做比赛的时候听说过这类用KD_Tree维护的数据结构题 然后知道是KD_Tree,然而并不知道怎么写QAQ 比赛完了之后%了一发代码 其基本思路是这样的: 1.首先我们把询问[L,R]看成二维平面 ...

  4. 51NOD 算法马拉松8

    题目戳这里:51NOD算法马拉松8 某天晚上kpm在玩OSU!之余让我看一下B题...然后我就被坑进了51Nod... A.还是01串 水题..怎么乱写应该都可以.记个前缀和然后枚举就行了.时间复杂度 ...

  5. 51nod 算法马拉松 34 Problem D 区间求和2 (FFT加速卷积)

    题目链接  51nod 算法马拉松 34  Problem D 在这个题中$2$这个质数比较特殊,所以我们先特判$2$的情况,然后仅考虑大于等于$3$的奇数即可. 首先考虑任意一个点对$(i, j)$ ...

  6. 随便玩玩系列之一:SPOJ-RNG+51nod 算法马拉松17F+51nod 1034 骨牌覆盖v3

    先说说前面的SPOJ-RNG吧,题意就是给n个数,x1,x2,...,xn 每次可以生成[-x1,x1]范围的浮点数,把n次这种操作生成的数之和加起来,为s,求s在[A,B]内的概率 连续形的概率 假 ...

  7. 51Nod 算法马拉松21(迎新年)

    这次打算法马拉松是在星期五的晚上,发挥还算正常(废话,剩下的题都不会= =). 讲讲比赛经过吧. 8:00准时发题,拿到之后第一时间开始读. A配对,看上去像是二分图最大权匹配,一看范围吓傻了,先跳过 ...

  8. 51Nod 算法马拉松15 记一次悲壮而又开心的骗分比赛

    OwO 故事的起源大概是zcg前天发现51Nod晚上有场马拉松,然后他就很开心的过去打了 神奇的故事就开始了: 晚上的时候我当时貌似正在写线段树?然后看见zcg一脸激动告诉我第一题有九个点直接输出B就 ...

  9. 51Nod 算法马拉松23 开黑记

    惨啊……虽然开了半天黑,但是还是被dalao们踩了…… 第二次开黑,还是被卡在rank20了,我好菜啊……= = 写一写比赛经过吧…… 看到题之后习惯性都打开,A~D看上去似乎并没有什么思路,F应该是 ...

随机推荐

  1. linux命令中的字符串中间增加指令,例如路径中增加日期变量,实时获取当前的日期

    `command` 倒引号 (backticks) 在前面的单双引号,括住的是字串,但如果该字串是一列命令列,会怎样?答案是不会执行.要处理这种情况,我们得用倒单引号来做.fdv=`date +%F` ...

  2. maridb 10.3 主从复制,待机情况下从库 cpu 占用率高的处理方法

    发现两台从库,一直都在CPU 占用率 60% 90% 中浮动, 但是写库却很正常.搜了一大把没找到答案,把参数测试了一下得出以下结论 slave  my.cnf 添加如下参数 #只读模式 read_o ...

  3. [原][openstack-pike][compute node][issue-1]openstack-nova-compute.service holdoff time over, scheduling restart.

    在安装pike  compute node节点的时候遇到启动nova-compute失败,问题如下(注意红色字体): [root@compute1 nova]# systemctl start ope ...

  4. zabbix的安装部署及自定义监控的实现

    此篇感谢我的小师傅. 1. Zabbix主要功能和优劣势说明 1. Zabbix主要功能和优劣势说明 1.1 Zabbix主要功能: 1)Application monitoring 应用监控 数据库 ...

  5. error_match问题

    当nginx的sendfile处于on的情况下,在docker的环境下修改js文件会出现error_match的问题,应该要在nginx的配置中把sendfile设为off

  6. Nestjs 获取cookie

    Docs yarn add cookie-parser main.ts import { NestFactory } from '@nestjs/core'; import { AppModule } ...

  7. servlet转发重定向

    1.request.getRequestDispacther("/test.jsp").forword(request,response);     转发   浏览器URL是一个地 ...

  8. react中进入某个详情页URL路劲参数Id获取问题

    <Route path={`${match.url}/detail/:id`} component={AppManageAddDetail} /> const { match:{param ...

  9. typescript 如何引入jquery

    webpack配置,不需要配置externals,webpack具体配置如下, const webpack = require('webpack'); const path = require('pa ...

  10. vue中使用mui滑动条无法正常滑动

    需要引入 `mui.min.js`  引入之后浏览器会报错,mui.min.js中的'caller', 'callee', and 'arguments'是不严格模式的js,而webpack中是严格模 ...