P5012 水の数列
P5012 水の数列
离线处理出选择每个数得到区间数得到刚开始的得分
\(RMQ_{ij}\)表示\(i\)~\(i\)+\(2^j\)-1的区间最大值
#include<cstdio>
#include<vector>
using namespace std;
typedef long long LL;
const LL maxn=1e6+10;
inline LL Read(){
LL x=0,f=1; char c=getchar();
while(c<'0'||c>'9'){
if(c=='-') f=-1; c=getchar();
}
while(c>='0'&&c<='9'){
x=(x<<3)+(x<<1)+c-'0'; c=getchar();
}return x*f;
}
LL n,m;
LL ans[maxn],len[maxn],lg[maxn>>1],a[maxn];
int RMQ[maxn>>1][20];
inline LL Chkmax(LL x,LL y){
if(!x||!y)
return x+y;
if(ans[x]*y>ans[y]*x)
return x;
else if(ans[y]*x,ans[x]*y)
return y;
else
return (x>y)?x:y;
}
vector<LL> vec[maxn];
inline void First(){
LL up=0;
for(LL i=1;i<=n;++i)
vec[a[i]].push_back(i),
up=max(up,a[i]);
LL val=0,cnt=0;
for(LL i=1;i<=up;++i){
if(!vec[i].size())
continue;
for(LL j=0;j<vec[i].size();++j){
LL v=vec[i][j];
if(!len[v+1]&&!len[v-1]){
++val;
++cnt;
len[v]=1;
}else if(len[v+1]&&len[v-1]){
val+=2*len[v+1]*len[v-1]+2*len[v+1]+2*len[v-1]+1;
--cnt;
len[v-len[v-1]]=len[v+len[v+1]]=len[v-1]+len[v+1]+1;
}else if(len[v-1]){
val+=2*len[v-1]+1;
len[v-len[v-1]]=len[v]=len[v-1]+1;
}else{
val+=2*len[v+1]+1;
len[v+len[v+1]]=len[v]=len[v+1]+1;
}
}
ans[i]=val;
RMQ[cnt][0]=Chkmax(i,RMQ[cnt][0]);
}
for(LL i=2;i<=(n+1)/2;++i)
lg[i]=lg[i>>1]+1;
for(LL j=1;j<=19;++j)
for(LL i=1;i+(1<<j)-1<=(n+1)/2;++i)
RMQ[i][j]=Chkmax(RMQ[i][j-1],RMQ[i+(1<<(j-1))][j-1]);
}
inline LL Query(LL l,LL r){
if(l>(n+1)/2)
return 0;
if(r>(n+1)/2)
r=(n+1)/2;
LL x=lg[r-l+1];
return Chkmax(RMQ[l][x],RMQ[r-(1<<x)+1][x]);
}
int main(){
n=Read(),m=Read();
for(LL i=1;i<=n;++i)
a[i]=Read();
First();
LL last_ans=0;
while(m--){
LL a=Read(),b=Read(),x=Read(),y=Read();
LL l=(a*last_ans+x-1)%n+1,r=(b*last_ans+y-1)%n+1;
if(l>r)
swap(l,r);
LL now=Query(l,r);
if(!now){
printf("-1 -1\n");
printf("%lld %lld %lld\n",l,r,last_ans);
last_ans=1;
}else{
printf("%lld %lld\n",ans[now],now);
printf("%lld %lld %lld\n",l,r,last_ans);
last_ans=ans[now]%n*now%n;
}
}
return 0;
}
P5012 水の数列的更多相关文章
- luogu5012 水の数列 (并查集+线段树)
如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x ...
- hdu 2044:一只小蜜蜂...(水题,斐波那契数列)
一只小蜜蜂... Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...
- hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)
解题思路: 一只母猪生下第二头后立马被杀掉,可以这样想即,生下第二头便被杀掉,可以看成母猪数量没变 第一天 1 第二天 2 第三天 3 :第一头生第二头后杀掉还是1头,第二头再加上第二头生下的,一共三 ...
- 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...
- 入门训练 Fibonacci数列 (水题)
入门训练 Fibonacci数列 时间限制:1.0s 内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...
- CCF 201509-1 数列分段 (水题)
问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示 ...
- 洛谷 P1181 数列分段Section I(水题日常)
题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...
- zzulioj--1712--神秘的数列(水题)
1712: 神密的数列 Time Limit: 1 Sec Memory Limit: 128 MB Submit: 122 Solved: 92 SubmitStatusWeb Board De ...
- 洛谷P3901 数列找不同(莫队水题)
重温下手感,判断区间是否全是不同的数字有两种做法,一个长度为len的区间不同的数字,参见HH的项链,一种是区间众数,参见蒲公英,是水题没错了.明天搞数据库,然后继续自己的gre和训练计划 #inclu ...
随机推荐
- 启动mongodb报错问题
[root@zk-datanode-02 mongodb]# bin/mongod -f config/mongo.cnf &[1] 30549[root@zk-datanode-02 mon ...
- 我的Android进阶之旅------>怎样在多个LinearLayout中加入分隔线
假设要适合于全部的Android版本号,能够在多个LinearLayout放置用于显示分隔线的View. 比如,放一个ImageView组件.然后将其背景设为分隔线的颜色或图像,分隔线View的定义代 ...
- PocketBeagle 初高级设置
前言 原创文章,转载引用务必注明链接,水平有限,如有疏漏,欢迎指正.本文使用markdown标记语言写成,为获得最好的阅读体验,请访问我的博客原文. 1. PocketBeagle Summary ...
- codeforces 204(Div.1 A) Little Elephant and Interval(贪心)
题意: 有一种个位数与最高位数字相等的数字,求在l,r的范围内,这样的数字的个数. 思路: 找下规律就知道当当n>10的时候除去个位以后的答案等于n/10,然后考虑第一个数字是否小于最后一个.小 ...
- appium在MAC上环境搭建
1. 安装.启动Appium bixiaopeng@bixiaopeng ~$ npm install -g appium Password: npm http GET https://registr ...
- 【Python】删除字符串的空白
在程序中,额外的空白可能让人迷惑,对于程序员来说,'python'跟'python '看起来几乎一样,但是对于程序来说,可是千差万别 (lstrip)删除开头空白 >>> Langu ...
- 关于顺序磁盘IO比内存随机IO快的讨论
这个问题来源于我书中引用的一幅图: 我们从图中明显可以看某性能测试的结果表明普通机械磁盘的顺序I/O性能指标是53.2M values/s,SSD的顺序I/O性能指标是42.2M values/s,而 ...
- BFC简析
一.BOX模型 box是CSS中布局的基本单位,而不同类型的box,会参与不同的Formatting Context(一个决定如何渲染文档的容器),box内的元素会以不同的方式渲染. block-le ...
- VueJS自定义过滤器:new Vue({filters:{filter1:function(){}....}})
Vue.js 允许你自定义过滤器,被用作一些常见的文本格式化. 语法 <!-- 在两个大括号中 --> {{ message | capitalize }} <!-- 在 v-bin ...
- Leetcode Array 4 Median of Two Sorted Arrays
做leetcode题目的第二天,我是按照分类来做的,做的第一类是Array类,碰见的第二道题目,也就是今天做的这个,题目难度为hard.题目不难理解,但是要求到了时间复杂度,就需要好好考虑使用一下算法 ...