CF1967C题解
CF1967C
题意
对于数组
其中
对于一个正整数
给你正整数
解析
理解题意便可以看出,各个下标数值之间的关系形成一片森林,下标
打表可看出对于下标
由于
预处理完贡献值后,自底向上倒推,在祖先节点中减去当前节点的贡献,最后该祖先节点
代码
#include <bits/stdc++.h>
#include <unordered_map>
#define LL long long
#define ll long long
#define double long double
#define pii pair<int, int>
#define pll pair<LL, LL>
#define pdd pair<double, double>
using namespace std;
//nxt数组用于记录下标的父节点下标,N为矩阵大小
LL a[200005], b[200005], pre[25][25], nxt[200005], N, mod = 998244353;
//矩阵加速
void mqpow(int n)
{
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
pre[i][j] = (i == j);
LL M[25][25], cur[25][25];
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
M[i][j] = (i >= j);
while (n)
{
if (n & 1)
{
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
cur[i][j] = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
for (int k = 1; k <= N; k++)
cur[i][j] = (cur[i][j] + pre[i][k] * M[k][j] % mod) % mod;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
pre[i][j] = cur[i][j];
}
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
cur[i][j] = 0;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
for (int k = 1; k <= N; k++)
cur[i][j] = (cur[i][j] + M[i][k] * M[k][j] % mod) % mod;
for (int i = 1; i <= N; i++)
for (int j = 1; j <= N; j++)
M[i][j] = cur[i][j];
n >>= 1;
}
}
int main()
{
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
//预处理nxt数组
for (int i = 1; i <= 200000; i++)
{
int idx = 0, cur = i;
while (!(cur & (1 << idx)))
cur |= 1 << idx++;
while (cur & (1 << idx))
idx++;
nxt[i] = cur ^ ((1 << (idx + 1)) - 1);
}
int T, n;
LL k;
cin >> T;
while (T--)
{
cin >> n >> k;
N = log2(n) + 1;
for (int i = 1; i <= n; i++)
cin >> b[i];
mqpow(k); //预处理深度差产生的贡献系数
for (int i = 1; i <= N; i++)
for (int j = 1; j * (1 << (i - 1)) <= n; j += 2) //从叶子节点(lowbit值为1下标)开始倒推
{
int cur = j * (1 << (i - 1));
a[cur] = b[cur]; //节点保留值即为答案
for (int l = nxt[cur], m = 2; l <= n; l = nxt[l], m++)
b[l] = (b[l] + mod - a[cur] * pre[m][1] % mod) % mod; //从祖先节点中减去当前节点的贡献
}
for (int i = 1; i <= n; i++)
cout << a[i] << " ";
cout << "\n";
}
}
最后祝各位顺利AC。>w<
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 地球OL攻略 —— 某应届生求职总结
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 提示词工程——AI应用必不可少的技术
· .NET周刊【3月第1期 2025-03-02】