首先第一步,位运算拆位。变为一个区间的 \(And\) 为 \(0\) 或 \(1\)。

如果 \(And\) 为 \(1\),那么所有数都需要为 \(1\),否则为 \(0\)。

我们把所有可能为 \(0\) 的位置拉出来,然后和区间进行离散化。这个可以做到 \(O(n+m)\),处理每个位置前面第一个可能为 \(0\) 的位置即可。

问题转化为一个序列的一些区间中必须包含至少一个 \(0\)。仔细看看,好像和 命运 在链上的情况有点像。

于是。我们设上一个 \(dp[n][k]\) 表示当前从左往右扫描到第 \(n\) 个数,上一个 \(0\) 出现在第 \(k\) 个位置上。

分两种情况:是某个区间的右端点和不是某个区间的右端点。对于每个是右端点的位置,我们存下左端点中最靠右的那个设为 \(L_n\)。

是右端点:

\[dp[n][k]=[L_n\leq k]dp[n-1][k]
\]
\[dp[n][n]=\sum_{i=1}^{n-1}dp[n-1][i]
\]

不是右端点:

\[dp[n][k]=dp[n-1][k]
\]
\[dp[n][n]=\sum_{i=1}^{n-1}dp[n-1][i]
\]

问题相当于每次让 \(dp[n]\) 继承 \(dp[n-1]\),然后删掉某一段左端点,然后插入一个位置为左边的位置的和。

我们可以维护一个区间 \([L,R]\) 表示目前有值的区间,然后用一个 \(sum\) 维护区间的和,然后就做完了。

答案是每一位最后的 \(sum\) 的积。

#include<cstdio>
typedef unsigned ui;
const ui M=5e5+5,mod=998244353;
ui n,k,m,l[M],r[M],x[M];
ui s[M];
inline ui max(const ui&a,const ui&b){
return a>b?a:b;
}
inline ui Solve(const ui&k){
ui len(0);
static ui t[M],L[M],dp[M],pre[M];
for(ui i=1;i<=n;++i)s[i]=0;
for(ui i=1;i<=m;++i)if(t[i]=x[i]>>k&1)++s[l[i]],--s[r[i]+1];
for(ui i=1;i<=n;++i)s[i]+=s[i-1];
for(ui i=1;i<=n;++i){
if(!s[i])++len;pre[i]=len;
}
for(ui i=1;i<=len;++i)L[i]=0;
for(ui i=1;i<=m;++i)if(!t[i])L[pre[r[i]]]=max(L[pre[r[i]]],s[l[i]]?pre[l[i]]+1:pre[l[i]]);
for(ui i=1;i<=len;++i)L[i]=max(L[i],L[i-1]);
ui l(0),r(0);unsigned long long sum(1);dp[0]=1;
for(ui i=1;i<=len;++i){
while(l<L[i-1])sum-=dp[l++];dp[i]=sum%mod;sum+=dp[i];
}
while(l<L[len])sum-=dp[l++];
return sum%mod;
}
signed main(){
ui ans(1);
scanf("%u%u%u",&n,&k,&m);
for(ui i=1;i<=m;++i)scanf("%u%u%u",l+i,r+i,x+i);
for(ui i=0;i<k;++i)ans=1ull*ans*Solve(i)%mod;
printf("%u",ans);
}

CF1327F题解的更多相关文章

  1. 2016 华南师大ACM校赛 SCNUCPC 非官方题解

    我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...

  2. noip2016十连测题解

    以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...

  3. BZOJ-2561-最小生成树 题解(最小割)

    2561: 最小生成树(题解) Time Limit: 10 Sec  Memory Limit: 128 MBSubmit: 1628  Solved: 786 传送门:http://www.lyd ...

  4. Codeforces Round #353 (Div. 2) ABCDE 题解 python

    Problems     # Name     A Infinite Sequence standard input/output 1 s, 256 MB    x3509 B Restoring P ...

  5. 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解

    题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...

  6. 2016ACM青岛区域赛题解

    A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/65536 K (Jav ...

  7. poj1399 hoj1037 Direct Visibility 题解 (宽搜)

    http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...

  8. 网络流n题 题解

    学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...

  9. CF100965C题解..

    求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...

随机推荐

  1. Docker入门 安装 基础操作命令

    Docker 学习来源 https://www.bilibili.com/video/av26993050/?spm_id_from=333.788.b_636f6d6d656e74.20 https ...

  2. Java实现二叉搜索树

    原创:转载需注明原创地址 https://www.cnblogs.com/fanerwei222/p/11406176.html 尝试一下用Java实现二叉搜索树/二叉查找树,记录自己的学习历程. 1 ...

  3. mock测试出现Circular view path [trade_records]: would dispatch back to the current handler URL

    这是因为你的Controller中返回的视图名称与你当前的requestMapping名称一样,这并没有很好的解决方案,除非你改掉其中一个名字. 因为springframework test时你并没有 ...

  4. Solution -「CERC 2016」「洛谷 P3684」机棚障碍

    \(\mathcal{Description}\)   Link.   给一个 \(n\times n\) 的网格图,每个点是空格或障碍.\(q\) 次询问,每次给定两个坐标 \((r_1,c_1), ...

  5. suse 12 二进制部署 Kubernetets 1.19.7 - 第09章 - 部署kubelet组件

    文章目录 1.9.部署kubelet 1.9.0.创建kubelet bootstrap kubeconfig文件 1.9.1.创建kubelet配置文件 1.9.2.配置kubelet为system ...

  6. MXNet源码分析 | Gluon接口分布式训练流程

    本文主要基于MXNet1.6.0版本,对Gluon接口的分布式训练过程进行简要分析. 众所周知,KVStore负责MXNet分布式训练过程中参数的同步,那么它究竟是如何应用在训练中的呢?下面我们将从G ...

  7. Spring Security配置个过滤器也这么卷

    以前胖哥带大家用Spring Security过滤器实现了验证码认证,今天我们来改良一下验证码认证的配置方式,更符合Spring Security的设计风格,也更加内卷. CaptchaAuthent ...

  8. Spring声明式事务的两种配置方式(注解/xml)

    application配置tx:annotation-driven 配置声明式事务tx:TransactionManager 声明式事务需要数据源所以需要配置DataSource 使用:在类或者方法上 ...

  9. nginx 80端口强制转443

    server { listen 80; server_name test.com; rewrite ^(.*)$ https://${server_name}$1 permanent; } serve ...

  10. Nginx中关于虚拟主机的一点冷门知识

    一些闲聊 坐标深圳南山. 前两天公司晚上9点过,通知第二天要48小时核酸才能进办公楼.看到消息,已经是9点半多了,走到公司附近的核酸点,是10点过.然后发现那个点人好少,走近了才发现核酸点已经下班了, ...