wikioi 3884 宠幸妹纸 (快速幂+RMQ)

3884 【HR】宠幸妹纸
时间限制: 1 s
空间限制: 256000 KB
题目等级 : 黄金 Gold
题解
查看运行结果
题目描述 Description
每天HR都会随机宠幸自己的妹纸,当然,HR为了不选到一些他不喜欢的妹纸,他决定把随机和选择结合在一起。

  HR会评出妹子的萌值,颜值,粘人值,以此来评出愉悦值,HR那超越常人的思想认为愉悦值=萌值的颜值次方mod(或者%)粘人值。然后随机选择一段区间,在这段区间里找出愉悦值最高的妹纸来宠幸。

  他找到了你这个单身狗,并说只要你帮他找出来,他就给你介绍一个妹纸。

输入描述 Input Description
第1行一个整数n,表示有后宫妹纸(n<=500000,卧槽好多)

第2到n+1行有a,b,c(b<=100000)三个整数,代表妹纸的萌值,颜值和粘人值。

第n+2行有一个整数m(m<=1000000)

第n+3到n+m+3行每行两个整数l,r代表两个区间。

输出描述 Output Description
m行每行一个整数,代表HR要宠幸的妹纸的愉悦值。

样例输入 Sample Input
5

1 2 3

2 3 4

3 4 5

4 5 6

5 6 7

3

1 3

1 4

2 5

样例输出 Sample Output
1
4
4

program df;
var i,j,n,m,x,y,z,k,t:longint;
f:array[1..500000,0..20] of int64;
a,b,c,d:array[0..500000] of longint;
function deal(x,y,z:longint):int64;
var xx:int64;
begin
deal:=1; xx:=x;
while y>0 do
begin
if y and 1=1 then deal:=((deal mod z)*(xx mod z)) mod z;
xx:=((xx mod z)*(xx mod z)) mod z;
y:=y shr 1;
end;
exit;
end;

function max(x,y:int64):int64;
begin
if x>y then exit(x)
else exit(y);
end;

begin
readln(n);
for i:=1 to n do
begin
readln(x,y,z);
f[i,0]:=deal(x,y,z);
end;
for j:=1 to 20 do
for i:=1 to n do
if (i+1<<(j-1))<=500000 then //防止数组越界
f[i,j]:=max(f[i,j-1],f[i+1<<(j-1),j-1]);
readln(m);
for i:=1 to m do
begin
readln(x,y);
k:=0;
while y+x-1>1<<(k+1) do inc(k);
writeln(max(f[x,k],f[y-(1’<<’k)+1,k])); //小于号无法表示引号隐起来
end;
end.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值