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 水の数列的更多相关文章

  1. luogu5012 水の数列 (并查集+线段树)

    如果我们能求出来每个区间个数的最大分值,那就可以用线段树维护这个东西 然后出答案了 然后这个的求法和(luogu4269)Snow Boots G非常类似,就是我们把数大小排个序,每次都拿<=x ...

  2. hdu 2044:一只小蜜蜂...(水题,斐波那契数列)

    一只小蜜蜂... Time Limit: / MS (Java/Others) Memory Limit: / K (Java/Others) Total Submission(s): Accepte ...

  3. hdu 2160 母猪的故事(睡前随机水一发)(斐波那契数列)

    解题思路: 一只母猪生下第二头后立马被杀掉,可以这样想即,生下第二头便被杀掉,可以看成母猪数量没变 第一天 1 第二天 2 第三天 3 :第一头生第二头后杀掉还是1头,第二头再加上第二头生下的,一共三 ...

  4. 蓝桥杯 入门训练 Fibonacci数列(水题,斐波那契数列)

    入门训练 Fibonacci数列 时间限制:1.0s   内存限制:256.0MB 问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n比较大时,Fn也非 ...

  5. 入门训练 Fibonacci数列 (水题)

    入门训练 Fibonacci数列   时间限制:1.0s   内存限制:256.0MB        问题描述 Fibonacci数列的递推公式为:Fn=Fn-1+Fn-2,其中F1=F2=1. 当n ...

  6. CCF 201509-1 数列分段 (水题)

    问题描述 给定一个整数数列,数列中连续相同的最长整数序列算成一段,问数列中共有多少段? 输入格式 输入的第一行包含一个整数n,表示数列中整数的个数. 第二行包含n个整数a1, a2, …, an,表示 ...

  7. 洛谷 P1181 数列分段Section I(水题日常)

    题目描述 对于给定的一个长度为N的正整数数列A[i],现要将其分成连续的若干段,并且每段和不超过M(可以等于M),问最少能将其分成多少段使得满足要求. 输入输出格式 输入格式: 输入文件divide_ ...

  8. zzulioj--1712--神秘的数列(水题)

    1712: 神密的数列 Time Limit: 1 Sec  Memory Limit: 128 MB Submit: 122  Solved: 92 SubmitStatusWeb Board De ...

  9. 洛谷P3901 数列找不同(莫队水题)

    重温下手感,判断区间是否全是不同的数字有两种做法,一个长度为len的区间不同的数字,参见HH的项链,一种是区间众数,参见蒲公英,是水题没错了.明天搞数据库,然后继续自己的gre和训练计划 #inclu ...

随机推荐

  1. 给控件做数字签名之一:将控件打包为Web发布包 [转]

    微软代码签名证书使用指南 http://www.wotrust.com/support/signcode_guide.htm 签名重要性:http://www.wotrust.com/FAQ/whyS ...

  2. java基础篇1之可变参数,增强for循环,自动装箱

    1.java中可变参数应用 例如 add(int x,int... args) 1)只能放在参数列表的最后面 2)...位于变量类型和变量名之间,前后有无空格都可以 3)调用可变参数的方法时,编译器为 ...

  3. 发送Post的请求代码

    通过浏览器访问的URL请求,都是GET请求,接下来代码是模拟POST发送请求 import java.io.BufferedReader; import java.io.FileNotFoundExc ...

  4. 2016.6.21 -Dmaven.multiModuleProjectDirectory system propery is not set,Check $M2_HOME environment variable and mvn script match.

    eclipse中使用maven插件的时候,运行run as maven build的时候报错: -Dmaven.multiModuleProjectDirectory system propery i ...

  5. 2016.6.20 eclipse中的jsp文件的字体大小在哪里修改

    刚打开eclipse的时候,觉得jsp文件的字体太小了.于是去修改字体,但是colors and fonts里的字体选项太多了,不知道哪一个是. 试了几个后发现,是structured text ed ...

  6. windows中静态库lib和动态dll的区别及使用方法

    1. 静态库lib和动态dll的区别 1.1 项目类型 VS在建Win32项目时,有以下选项: windows应用程序控制台应用程序DLL静态库最后两个类型:DLL和静态库,这两种项目类型是不可以单独 ...

  7. OSX:设置用户默认浏览器

    近期我们遇到的情况是,须要统一设置用户的默认浏览器为Google Chrome.而系统默认的是Safari. 这个设置是系统Launch Services基于用户管理的. 意思就是说,即便是改动了系统 ...

  8. JQuery中$.get(),$.post(),$.ajax(),$.getJSON()的区别

    详细解读Jquery各Ajax函数:$.get(),$.post(),$.ajax(),$.getJSON() 一.$.get(url,[data],[callback]) 说明:url为请求地址,d ...

  9. 总结java编程常用的快捷键

    Eclipse 常用快捷键 Eclipse的编辑功能非常强大,掌握了Eclipse快捷键功能,能够大大提高开发效率.Eclipse中有如下一些和编辑相关的快捷键. 1. [ALT+/] 此快捷键为用户 ...

  10. 在 Ubuntu16.04上安装并使用Docker

    介绍 Docker是一个开放源代码软件项目,让应用程序布署在软件容器下的工作可以自动化进行,借此在Linux操作系统上,提供一个额外的软件抽象层,以及操作系统层虚拟化的自动管理机制[1].Docker ...