LGP6144题解
冲了50分钟外加10分钟厕所才冲出来,请问我还有救吗。
看上去像是金组题目的加强版,实际上是金组题目的魔改版。
还是考虑像弱化版那样按照左端点排序,并且记录答案的 \(0\sim k\) 次幂和。
然后考虑新增的贡献。仍然是右端点不超过自身构成的贡献。但是我们将这部分写成一个集合 \(|S|\),我们在这里约定后面枚举的 \(x\) 都属于这个 \(|S|\)。那么贡献就是 \(\sum(x+1)^k=\sum_{i=0}^k\binom{k}{i}\sum x^k\)。
这一部分很平凡,但是我们应该怎么维护贡献呢。。。
我们只要把这一部分线段拉出来做一遍原问题不就好了
考虑将这些线段丢到一个序列上,按照左端点排序。(别忘了右端点是不超过某个值的)
假设对于第 \(i\) 条线段,多出的贡献是 \(f_i\),那么这一车线段的答案应该是 \(\sum_{i=1}^m2^{m-i}f_i\)。
然后是加入一条新的线段。
首先先把这条线段的贡献直接丢到序列上。
这条线段的贡献是不是“右端点不大于最外层枚举线段左端点且不大于自身左端点的线段”构成个集合的贡献?
看一眼,好像就是最外层问题的贡献啊?直接插进来。
对于自身对其他线段的贡献,找到右端点,然后在序列上二分出一个后缀,满足这些后缀的左端点都比加入的新线段大。
然后让这个后缀的贡献全部加上“自身贡献+1”就行了。
对于系数,只需要每次乘上 \(2\) 就好了。
然后怎么把这些线段放到正确的位置上,只需对右端点排序就行了。
复杂度 \(O(k^2n+kn\log n)\),可以通过。
upd:上面下饭了
考虑右端点不超过左端点的答案,其实只需要把每个节点的答案丢到右端点上即可。。。
然后统计的时候直接做和。。。
但是这样会漏掉右端点在 \([l,r]\) 中的部分。这部分是可以直接加到答案里面去的。
然后右端点在 \((r,2n]\) 的线段,明显使其答案翻了倍。
所以只需要单点修改,区间乘,区间和即可。。。
#include<cstdio>
#include<vector>
typedef unsigned ui;
const ui M=1e5+5,mod=1e9+7;
ui n,k,C[11][11],l[M],r[M],num[M],pw2[M],id[M<<1],delta[M][11];
ui f[11],g[11],tag[M<<3],sum[M<<3][11];bool v1[M<<1],v2[M<<1],vis[M<<3];
inline void update(const ui&u){
for(ui i=0;i<=k;++i)sum[u][i]=(sum[u<<1][i]+sum[u<<1|1][i])%mod;
}
inline void pushdown(const ui&u){
if(tag[u]){
tag[u<<1]+=tag[u];tag[u<<1|1]+=tag[u];
for(ui i=0;i<=k;++i)sum[u<<1][i]=1ull*pw2[tag[u]]*sum[u<<1][i]%mod;
for(ui i=0;i<=k;++i)sum[u<<1|1][i]=1ull*pw2[tag[u]]*sum[u<<1|1][i]%mod;
tag[u]=0;
}
}
inline void Mdf1(const ui&u,const ui&x,const ui&L=0,const ui&R=(n<<1)){
if(L==R){
for(ui i=0;i<=k;++i)sum[u][i]=f[i];return;
}
const ui mid=L+R>>1;pushdown(u);
if(x<=mid)Mdf1(u<<1,x,L,mid);
else Mdf1(u<<1|1,x,mid+1,R);
update(u);
}
inline void Mdf2(const ui&u,const ui&x,const ui&L=0,const ui&R=(n<<1)){
if(x>R)return;
if(x<=L){
for(ui i=0;i<=k;++i)sum[u][i]=2*sum[u][i]%mod;++tag[u];return;
}
const ui mid=L+R>>1;pushdown(u);
Mdf2(u<<1,x,L,mid);Mdf2(u<<1|1,x,mid+1,R);
update(u);
}
inline void Qry(const ui&u,const ui&l,const ui&r,const ui&L=0,const ui&R=(n<<1)){
if(l>R||L>r)return;
if(l<=L&&R<=r){
for(ui i=0;i<=k;++i)f[i]=(f[i]+sum[u][i])%mod;return;
}
const ui mid=L+R>>1;pushdown(u);
Qry(u<<1,l,r,L,mid);Qry(u<<1|1,l,r,mid+1,R);
update(u);
}
signed main(){
ui ans(0);
scanf("%u%u",&n,&k);pw2[0]=1;C[0][0]=1;f[0]=1;Mdf1(1,0);
for(ui i=1;i<=n;++i)pw2[i]=2*pw2[i-1]%mod;
for(ui i=1;i<=k;++i){
C[i][0]=1;
for(ui j=1;j<=i;++j)C[i][j]=(C[i-1][j]+C[i-1][j-1])%mod;
}
for(ui i=1;i<=n;++i)scanf("%u%u",l+i,r+i),id[l[i]]=i;
for(ui i=1;i<=(n<<1);++i)if(id[i]){
const ui&Id=id[i],L=l[Id],R=r[Id];
for(ui i=0;i<=k;++i)f[i]=0;Qry(1,0,L-1);
for(ui i=0;i<=k;++i){
unsigned long long sum(0);
for(ui j=0;j<=i;++j)sum+=1ull*C[i][j]*f[j];
g[i]=sum%mod;
}
for(ui i=0;i<=k;++i)f[i]=0;Qry(1,L,R-1);
for(ui i=0;i<=k;++i)f[i]=(f[i]+g[i])%mod;
Mdf1(1,R);Mdf2(1,R+1);
}
printf("%u",sum[1][k]);
}
LGP6144题解的更多相关文章
- 2016 华南师大ACM校赛 SCNUCPC 非官方题解
我要举报本次校赛出题人的消极出题!!! 官方题解请戳:http://3.scnuacm2015.sinaapp.com/?p=89(其实就是一堆代码没有题解) A. 树链剖分数据结构板题 题目大意:我 ...
- noip2016十连测题解
以下代码为了阅读方便,省去以下头文件: #include <iostream> #include <stdio.h> #include <math.h> #incl ...
- BZOJ-2561-最小生成树 题解(最小割)
2561: 最小生成树(题解) Time Limit: 10 Sec Memory Limit: 128 MBSubmit: 1628 Solved: 786 传送门:http://www.lyd ...
- Codeforces Round #353 (Div. 2) ABCDE 题解 python
Problems # Name A Infinite Sequence standard input/output 1 s, 256 MB x3509 B Restoring P ...
- 哈尔滨理工大学ACM全国邀请赛(网络同步赛)题解
题目链接 提交连接:http://acm-software.hrbust.edu.cn/problemset.php?page=5 1470-1482 只做出来四道比较水的题目,还需要加强中等题的训练 ...
- 2016ACM青岛区域赛题解
A.Relic Discovery_hdu5982 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/65536 K (Jav ...
- poj1399 hoj1037 Direct Visibility 题解 (宽搜)
http://poj.org/problem?id=1399 http://acm.hit.edu.cn/hoj/problem/view?id=1037 题意: 在一个最多200*200的minec ...
- 网络流n题 题解
学会了网络流,就经常闲的没事儿刷网络流--于是乎来一发题解. 1. COGS2093 花园的守护之神 题意:给定一个带权无向图,问至少删除多少条边才能使得s-t最短路的长度变长. 用Dijkstra或 ...
- CF100965C题解..
求方程 \[ \begin{array}\\ \sum_{i=1}^n x_i & \equiv & a_1 \pmod{p} \\ \sum_{i=1}^n x_i^2 & ...
随机推荐
- LDAP概念和原理介绍 (转)
相信对于许多的朋友来说,可能听说过LDAP,但是实际中对LDAP的了解和具体的原理可能还比较模糊,今天就从"什么是LDAP"."LDAP的主要产品"." ...
- Eclipse不能启动,提示:The Eclipse executable launcher was unable to locate its companion launcher jar
原因分析:JDK版本与eclipse不匹配 如jdk和eclipse版本号必须统一,64位都是64位,32位都是32位. jdk版本可以用命令,cmd进入命令窗口,然后输入java -version, ...
- 测试前期API未实现时,如何写测试方法
大家在做接口测试的时候可能经历过这种情况,开发出来接口文档后,测试人员就要开始编写接口测试的自动化代码.这时就会用到了mock server,mock server不在这里说了,百度一大堆,想怎么实现 ...
- LVS负载均衡群集部署——NAT模式
LVS负载均衡群集部署--NAT模式 1.群集应用概述 2.NAT模式LVS负载均衡群集部署 1.群集应用概述: 存在的问题: 互联网应用中,随着站点对硬件性能.响应速度.服务稳定性.数据可靠性等要求 ...
- HTML与HTTP协议
HTML与HTTP协议 目录 HTML与HTTP协议 一.HTML 1. HTML概述 2. HTML编辑 3. HTML语法规则 4. HTML文件结构 5. HTML基本标签 (1)头标签中常用标 ...
- shell——eval exec
eval # cat test.sh echo \$$# eval "echo \$$#" # sh test.sh a b c $3 c shell的内建命令exec将并不启动新 ...
- 2021江西省赛赛后总结(Crypto)
美国大选 程序: from Crypto.Util.number import * from secret import p,q def gcd(a, b): while b: a, b = b, a ...
- springCloud项目解决跨域问题
通过 spring cloud gateway 实现, 方式一:选择在主启动类中注册 CorsWebFilter 类: /** * 1.允许cookies跨域 * 2.允许向该服务器提交请求的URI, ...
- Solution -「多校联训」取石子游戏
\(\mathcal{Description}\) Link. 有 \(n\) 堆石子,第 \(i\) 堆有 \(x_i\) 个,Alice 每次只能从这堆中拿走 \(a_i\) 个石子,Bo ...
- [LeetCode]27.移除元素(Java)
原题地址: remove-element 题目描述: 给你一个数组 nums 和一个值 val,你需要 原地 移除所有数值等于 val 的元素,并返回移除后数组的新长度. 不要使用额外的数组空间,你必 ...