題目描述
給出乙個長度為 n 的數列
思路
這個題目可以尺取做,但是需要用逆元還要注意0的情況,不如線段樹直接,線段樹維護每乙個區間的連乘積,最後進行多次查詢取乙個最大值,注意取模
#include #pragma warning (disable:6031)
#pragma warning (disable:4996)
#define mem(a, b) memset(a, b, sizeof a);
using namespace std;
const int n = 2e5 + 10;
const int mod = 998244353;
typedef long long ll;
struct p ;
struct segementtree
int mid = (l + r) / 2;
build(l, mid, k << 1);
build(mid + 1, r, k << 1 | 1);
c[k].lsum = c[k << 1].lsum;
c[k].rsum = c[k << 1 | 1].rsum;
c[k].lsum %= mod;
c[k].rsum %= mod;
if (c[k << 1].lsum == c[k << 1].multi_sum)c[k].lsum = c[k].lsum * c[k << 1 | 1].lsum;
if (c[k << 1 | 1].rsum == c[k << 1 | 1].multi_sum)c[k].rsum = c[k].rsum * (c[k << 1].rsum);
c[k].lsum %= mod;
c[k].rsum %= mod;
c[k].multi_sum = c[k << 1].multi_sum * c[k << 1 | 1].multi_sum;
c[k].multi_sum %= mod;
c[k].max_sum = max(c[k << 1].max_sum, c[k << 1 | 1].max_sum);
c[k].max_sum = max(c[k].max_sum, (c[k << 1].rsum * c[k << 1 | 1].lsum) % mod);
} ll query(int l, int r, int k)
int mid = c[k].l + c[k].r;
mid /= 2;
ll res = 1;
if (l <= mid)
if (r > mid)
return res % mod;
}};segementtree st;
int main()
printf("%lld\n", ans);
return 0;
}
2020牛客寒假演算法基礎集訓營
長期更新,補完為止 2 g 判正誤 題意 t組資料。判斷a d b e c f是否等於g。1e9 a,b,c,g 1e9,0 d,e,f 1e9。保證不會出現指數和底數同為 0 的情況。思路 硬算會tle或mle。快速冪取模,為了增加過題概率,多取幾個模數判斷。includeusing namesp...
2020牛客寒假演算法基礎集訓營1
找規律,推公式 三角形個數為2 m n m n m 1 n 1 2 m n mn m 1 n 1 2 m n mn m 1 n 1 include include include include using namespace std typedef long long ll const int m...
2020牛客寒假演算法基礎集訓營1
h題 突然發現h題可以用好多種方法做的。方法一 雙指標,維護乙個修改次數小於等於k的區間 include using namespace std typedef long long ll const int mod 1e9 7 const int n 1e5 5 const int inf 0x3f...