輪換 區間 收集果子

2021-08-10 06:52:13 字數 1680 閱讀 9771

理解了題意就很容易模擬了。

從後向前,然後括號裡面的不是位置,而是數。

st表處理

先處理出i->i+2^j的or和and

方法1:二分答案

用二分優化i->j j走的過程,直接找出一段連續區間相同的,然後直接跳。

方法2:倍增找答案

對於乙個i

直接倍增找i最近能滿足條件的j和最遠的j

方法1:二分(極端資料肯定t)

#include 

#include

#include

#include

using namespace std;

const int mod=1e9+7;

int ana[110000][21],ord[110000][21];

intq[110000];

int get_and(int l,int r)

int get_or(int l,int r)

int main()

long long cnt=0;

for(int i=1;i<=n;i++)

if(ans)

else

break;}}

printf("%lld\n",cnt%mod);

}

方法2:倍增

#include 

#include

#include

#include

using namespace std;

const int mod=1e9+7;

int ana[110000][21],ord[110000][21];

intq[110000];

int get_and(int l,int r)

int get_or(int l,int r)

int main()

long long cnt=0;

for(int i=1;i<=n;i++)

printf("%lld\n",cnt%mod);

}

收集果子,還沒做。。。