BZOJ 5395--[Ynoi2016]谁的梦(STL容斥)
5395: [Ynoi2016]谁的梦
Time Limit: 80 Sec Memory Limit: 128 MB
Submit: 22 Solved: 7
[Submit][Status][Discuss]
Description
Input
Output
Sample Input
6 6
1 3 1 1 3 2
2 3 3 2 1 1
1 1 1
1 1 2
1 1 2
1 1 1
1 1 1
Sample Output
1158
1168
1168
1158
1158
题目链接:
http://www.lydsy.com/JudgeOnline/problem.php?id=5395
Solution
少女的等待故事。
爱慕哥哥的少女,她坚信着哥哥的承诺,在向日葵的坡道下等待着他的回归。
居然在ynoi上抢到rk1.。。感觉很神奇。。。果然是因为我是素学家吗QAQ
然后是题解。。。
首先发现每种颜色对答案的贡献都是独立的。。。
对于某一种颜色,直接算在多少个序列中出现比较困难。。
所以考虑用总数减去没有出现的次数。。
然后对每一行统计答案,然后乘法原理。。。遍历的时候要用set。。。
单点修改只会影响某两种颜色的贡献,暴力修改即可。。
代码
#include<iostream>
#include<cstdio>
#include<set>
#include<map>
#define LL long long
using namespace std;
inline int read(){LL x=0,f=1;char ch=getchar();while(ch<'0'||ch>'9'){if(ch=='-')f=-1;ch=getchar();}while(ch>='0'&&ch<='9'){x=x*10+ch-'0';ch=getchar();}return x*f;
}
inline void Out(LL a){if(a>9) Out(a/10);putchar(a%10+'0');
}
const LL N=200050;
const LL mod=19260817;
LL n,m,tot,num,LEN,NY;
LL a[N],hang[N],lie[N],len[N],hed[N];
LL sum[N],nsum[N],ans[N],zer[N];
set<LL> S[N];
map<LL,LL>lsh;
map<LL,LL> mp[N],c[N];
LL res=0,ss;
LL pow(LL x,LL y){LL re=1;while(y){if(y&1) re=re*x%mod;x=x*x%mod;y>>=1;}return re;
}
LL get(LL u,LL v){LL l=1,r=tot;while(l!=r){LL mid=l+r>>1;if(hang[mid]<u||(hang[mid]==u&&lie[mid]<v)) l=mid+1;else r=mid;}return l;
}
int main(){NY=pow((LL)2,mod-2);n=read();m=read();ss=1;for(LL i=1;i<=n;++i){len[i]=read();ss=ss*(LL)len[i]%mod*(LL)(len[i]+1)%mod*NY%mod;LEN+=len[i];}//cout<<ss<<endl; sum[0]=nsum[0]=1;for(LL i=1;i<=n;++i){sum[i]=(LL)(len[i]+1)*(LL)len[i]/(LL)2%mod;sum[i]=sum[i]*sum[i-1]%mod;nsum[i]=pow(sum[i],mod-2);for(LL j=1;j<=len[i];++j){a[++tot]=read();if(!lsh[a[tot]]) {lsh[a[tot]]=++num;}a[tot]=lsh[a[tot]];S[a[tot]].insert(tot);hang[tot]=i;lie[tot]=j;}}LL u,v,w,x;for(LL i=1;i<=num;++i){u=0;v=0;ans[i]=1;for(set<LL>::iterator it=S[i].begin();it!=S[i].end();++it){//cout<<u<<" "<<v<<endl;x=*it;if(u==0){ans[i]=ans[i]*sum[hang[x]-1]%mod;mp[i][hang[x]]+=(LL)(lie[x]-1)*(LL)lie[x]/(LL)2;}else if(u!=hang[x]){mp[i][u]+=(LL)(len[u]-v)*(LL)(len[u]-v+1)/(LL)2;if(mp[i][u]>0) ans[i]=ans[i]*mp[i][u]%mod;else zer[i]++;ans[i]=ans[i]*sum[hang[x]-1]%mod*nsum[u]%mod;mp[i][hang[x]]+=(LL)(lie[x]-1)*(LL)lie[x]/(LL)2;}else mp[i][hang[x]]+=(LL)(lie[x]-v-1)*(LL)(lie[x]-v)/2;u=hang[x];v=lie[x];}mp[i][u]+=(LL)(len[u]-v)*(LL)(len[u]-v+1)/(LL)2;if(mp[i][u]>0) ans[i]=ans[i]*mp[i][u]%mod;else zer[i]++;ans[i]=ans[i]*sum[n]%mod*nsum[u]%mod;if(zer[i]>0) res+=ss;else res+=ss-ans[i];//cout<<ss<<" "<<ans[i]<<endl;}res=(res%mod+mod)%mod;Out(res);puts("");set<LL>::iterator l,r;LL L,R,lx,rx;while(m--){u=read();v=read();w=read();x=get(u,v);l=S[a[x]].lower_bound(x);r=l;if(l==S[a[x]].begin()) L=0;else {--l;L=*l;if(hang[L]!=u) L=0;else L=lie[L];}++r;if(r==S[a[x]].end()) R=len[u];else{R=(*r);if(hang[R]!=u) R=len[u];else R=lie[R]-1;}if(zer[a[x]]>0) res-=ss;else res-=ss-ans[a[x]];if(mp[a[x]][u]>0)ans[a[x]]=ans[a[x]]*pow(mp[a[x]][u],mod-2)%mod;else --zer[a[x]];mp[a[x]][u]-=(LL)(R-v)*(R-v+1)/2+(LL)(v-1-L)*(v-L)/2;mp[a[x]][u]+=(LL)(R-L)*(R-L+1)/2;if(mp[a[x]][u]>0) ans[a[x]]=ans[a[x]]*mp[a[x]][u]%mod;else ++zer[a[x]];if(zer[a[x]]>0) res+=ss;else res+=ss-ans[a[x]];S[a[x]].erase(x);if(!lsh[w]){lsh[w]=++num;ans[num]=sum[n];}w=lsh[w];a[x]=w;S[w].insert(x);l=S[a[x]].lower_bound(x);r=l;if(l==S[a[x]].begin()) L=0;else {--l;L=*l;if(hang[L]!=u) L=0;else L=lie[L];}++r;if(r==S[a[x]].end()) R=len[u];else{R=(*r);if(hang[R]!=u) R=len[u];else R=lie[R]-1;}if(R==len[u]&&L==0) mp[w][u]=(LL)(len[u]+1)*(LL)len[u]/2;if(zer[a[x]]>0) res-=ss;else res-=ss-ans[a[x]];if(mp[a[x]][u]>0)ans[a[x]]=ans[a[x]]*pow(mp[a[x]][u],mod-2)%mod;else --zer[a[x]];mp[a[x]][u]-=(LL)(R-L)*(R-L+1)/2;mp[a[x]][u]+=(LL)(R-v)*(R-v+1)/2+(LL)(v-1-L)*(v-L)/2;if(mp[a[x]][u]>0) ans[a[x]]=ans[a[x]]*mp[a[x]][u]%mod;else ++zer[a[x]];if(zer[a[x]]>0) res+=ss;else res+=ss-ans[a[x]];res=(res%mod+mod)%mod;Out(res);puts("");}return 0;
}
This passage is made by Iscream-2001.
转载于:https://www.cnblogs.com/Yuigahama/p/9652008.html
BZOJ 5395--[Ynoi2016]谁的梦(STL容斥)相关推荐
- bzoj 1042: [HAOI2008]硬币购物(dp+容斥)
1042: [HAOI2008]硬币购物 Time Limit: 10 Sec Memory Limit: 162 MB Submit: 2555 Solved: 1537 [Submit][St ...
- BZOJ 2301 - Problem b(莫比乌斯反演+容斥)
题目链接 https://cn.vjudge.net/problem/HYSBZ-2301 [题意] 对于给出的 n 个询问,每次求有多少个数对(x,y)(x,y) ,满足 a≤x≤b,c≤y≤da≤ ...
- 集训队作业2018: 青春猪头少年不会梦到兔女郎学姐(多限制容斥)(生成函数)(组合数学)
题意 给定 nnn 种颜色的球,第 iii 种颜色的球数量为 aia_iai 个,一种排列的贡献可以如下计算:先把这个序列首尾相连,然后把所有相邻且颜色相同的段拿出来,贡献为他们的长度之积,求所有排 ...
- 【集训队作业2018】青春猪头少年不会梦到兔女郎学姐(容斥)(分治FFT)
简要题意: 给定 nnn 种颜色的球,第 iii 种颜色的球数量为 aia_iai 个,一种排列的贡献可以如下计算:先把这个序列首尾相连,然后把所有相邻且颜色相同的段拿出来,贡献为他们的长度之积,求 ...
- [ZJOI 2016] bzoj 4455 小星星 - 容斥
最后要求一一对应,很难限制,相当于限制某些点没有被对应一个也不成立.但是其反面某些点不能被对应可以随便做,对这个容斥即可.可能需要稍微卡一下常数? #include<iostream> # ...
- bzoj 4455 [Zjoi2016]小星星 树形dp容斥
4455: [Zjoi2016]小星星 Time Limit: 10 Sec Memory Limit: 512 MB Submit: 643 Solved: 391 [Submit][Statu ...
- bzoj3589 动态树 求链并 容斥
bzoj3589 动态树 链接 bzoj 思路 求链并. 发现只有最多5条链子,可以容斥. 链交求法:链顶是两条链顶深度大的那个,链底是两个链底的\(lca\) 如果链底深度小于链顶,就说明两条链没有 ...
- bzoj4558[JLoi2016]方 容斥+count
4558: [JLoi2016]方 Time Limit: 20 Sec Memory Limit: 256 MB Submit: 452 Solved: 205 [Submit][Status] ...
- 【BZOJ4710】[JSOI2011]分特产(容斥)
[BZOJ4710]分特产(容斥) 题面 BZOJ 题解 比较简单吧... 设\(f[i]\)表示至多有\(i\)个人拿到东西的方案数. \(f[i]=\prod_{j=1}^m C_{m+i-1}^ ...
最新文章
- 2022-2028年中国二次供水产业发展动态及投资战略规划报告
- ADAS系统长篇综述(下)
- NBT:线虫的工程细菌共生体提高对西方玉米根虫的生防潜力
- 腾讯大数据平台,要“没人管”了
- jquery 设置checkbox的checked属性 总是出问题
- EOS 共识机制 (1)DPOS共识介绍
- Linux学习-仅执行一次的工作排程
- php函数相关函数,PHP数组相关函数汇总
- 虚拟主机创建虚拟lan_创建虚拟背景应用
- solr set java opts_關於 Apache Solr 無法啟動的問題
- python不用模块随机列表_python不用库实现随机 如何用python实现随机抽取
- hp 816、817 墨盒计数器清零图文教程
- 购买阿里云服务器发布项目后外网无法访问的解决办法
- S5P4418裸机开发(一):相关工具准备
- 奈奎斯特与香农定理_奈奎斯特定理和香农定理有什么区别?
- 渗透测试工具篇——sqlmap
- [Linux C编程]嵌入式数据库(二)
- redis常见使用场景与实例
- HttpStatus状态详解
- 记录一下自己的本本,DELL 640M铲掉XP,重装VISTA的过程