当前位置: 首页 > article >正文

六百六十六,盐豆不带盐了

我还有救吗......

P11040

#include <iostream>
#include <vector>
#include <cstring>
using namespace std;
const int MOD = 998244353;
const int MAXN = 1e7 + 5;
const int MAXM = 1e7 + 5;
int n, q;
int m;
int dpTable[MAXN][32];
int prefixSum[MAXN][32];

void add(int& a, int b) {
    a += b;
    if (a >= MOD) a -= MOD;
}

void sub(int& a, int b) {
    a -= b;
    if (a < 0) a += MOD;
}

void update(int x, int val) {
    for (int i = 0; i < 32; ++i) {
        if (x & (1 << i)) add(dpTable[1][i], val);
    }
}

void updatePrefixSum(int i, int j) {
    int k = j ^ (j - 1);
    while (k) {
        if (k & j) sub(dpTable[i][j], prefixSum[i - 1][k]);
        k = (k - 1) & j;
    }
    add(dpTable[i][j], prefixSum[i - 1][j - 1]);
    add(prefixSum[i][j], prefixSum[i][j - 1]);
    add(prefixSum[i][j], dpTable[i][j]);
}

void init() {
    memset(dpTable, 0, sizeof(dpTable));
    memset(prefixSum, 0, sizeof(prefixSum));
    update(1, 1);
    for (int i = 0; i < 32; ++i) prefixSum[1][i] = dpTable[1][i];
    for (int i = 2; i <= n; ++i) {
        for (int j = 1; j < 32; ++j) updatePrefixSum(i, j);
    }
}

void solve() {
    init();
    while (q--) {
        int op, x;
        cin >> op;
        if (op == 0) {
            cin >> x;
            m |= (1 << x);
            update(1 << x, 1);
            for (int i = 2; i <= n; ++i) {
                for (int j = 1; j < 32; ++j) updatePrefixSum(i, j);
            }
        } else if (op == 1) {
            cin >> x;
            if (m & (1 << x)) {
                m ^= (1 << x);
                update(1 << x, MOD - 1);
                for (int i = 2; i <= n; ++i) {
                    for (int j = 1; j < 32; ++j) updatePrefixSum(i, j);
                }
            }
        } else {
            int ans = 0;
            for (int i = 1; i <= m; ++i) add(ans, dpTable[n][i]);
            cout << ans << endl;
        }
    }
}

int main() {
    ios::sync_with_stdio(false);
    cin.tie(0);
    cin >> n >> q;
    solve();
    return 0;
}


http://www.kler.cn/a/531114.html

相关文章:

  • 【C++】B2122 单词翻转
  • Node.js常用知识
  • Vuex状态管理
  • Haskell语言的多线程编程
  • makailio-alias_db模块详解
  • 在C#中,什么是多态如何实现
  • 解决SetWindowCompositionAttribute使控件文本透明的问题
  • git中文件的状态状态切换
  • 全栈开发:使用.NET Core WebAPI构建前后端分离的核心技巧(一)
  • 代码随想录算法训练营Day35
  • Docker 部署教程jenkins
  • 1-刷力扣问题记录
  • 学习并熟练使用MyBatis
  • Unity打包安卓报错sdk version 0.0 < 26.0(亲测解决)
  • 深度解读 Docker Swarm
  • OpenAI 实战进阶教程 - 第七节: 与数据库集成 - 生成 SQL 查询与优化
  • 98.2 AI量化开发:基于DeepSeek打造个人专属金融消息面-AI量化分析师(理论+全套Python代码)
  • I.MX6ULL 中断介绍下
  • 【linux学习指南】线程概念与控制
  • 【大数据技术】教程03:本机PyCharm远程连接虚拟机Python
  • 玩转ChatGPT:DeepSeek测评(科研思路梳理)
  • Codeforces Round 981 (Div. 3)
  • 【模块化编程关键字】C语言模块化编程关键技术及其应用研究
  • 机试题——到邻国目标城市的最短距离
  • 基于单片机的智能感控杆设计(论文+源码)
  • 【电路笔记】-计数器与分频