代码: 题目是早上小Z模拟赛的膜法问题:
#include<bits/stdc++.h>
using namespace std;
inline int read(){
int s=0,w=1;char ch=getchar();
while(ch>'9'||ch<'0'){if(ch=='-')w=-1;ch=getchar();}
while(ch>='0'&&ch<='9'){s=s*10+ch-'0';ch=getchar();}
return s*w;
}
int a,b,q;
#define MAXN 1000000001
#define RI register int
int bin[30],log1[MAXN],mn[30][MAXN];
inline int query(int x,int y){
int t=log1[y-x+1];
return max(mn[t][x],mn[t][y-bin[t]+1]);
}
int main() {
a=read();b=read();q=read();
bin[0]=1;
for(RI i=1;i<30;i++)bin[i]=bin[i-1]*2;
log1[0]=-1;
for(RI i=1;i<=1000000001;i++)log1[i]=log1[i/2]+1;
for(RI i=1;i<=1000000001;i++)mn[0][i]=i%a+i%b;
for(RI i=1;i<=log1[1000000000];i++)
for(RI j=1;j<=1000000001;j++)
if(j+bin[j]-1<=1000000001)
mn[i][j]=max(mn[i-1][j],mn[i-1][j+bin[i-1]]);
for(RI i=1;i<=q;i++)
{
int l,r;l=read();r=read();
int xx=query(l,r);
printf("%d\n",xx);
}
return 0;
}
ST表 为什么在洛谷上提交会显示编译一直有问题,会说ld返回1. 而且自己编译的话,会显示 源代码未编译。
求助,谢谢。