5395: [Ynoi2016]谁的梦

Time Limit: 80 Sec  Memory Limit: 128 MB
Submit: 22  Solved: 7
[Submit][Status][Discuss]

Description

6.373
世界是独立于我的意志的。
6.374
就算我们所期望的全部的事情都发生了
这果然也只能说是命运的恩惠吧。
要问为什么,那是因为意志和世界之间
能够保证这件事的逻辑性的关联并不存在
Ludwig Josef Johann Wittgenstein [逻辑哲学论]
自从双胞胎的哥哥过世起,已经过了多久了呢…
从那时起,我一直保存着能够布偶。
在那以后的我只是个影子…而这个布偶才是我…
这样也并没有什么不好。
我觉得只要现在的我消失掉就行了…
那两个人却救了这样的我。
一个是由岐姐…
她又来到了我的身边…
带着皆守哥…回到了我们的身边…
水上由岐姐姐…温柔的姐姐
曾经非常喜欢皆守哥的人……
 
回去的路上…
平时不会经过的坡道…
在登上那个坡道的途中…
我看到了夜晚的太阳。
明明就在附近,却一直不知道的巨大的向日葵。
夜露使它的绒毛泛出了白光。
碧蓝的月光和黄色的向日葵…
就好像太阳和月亮的立场反过来一样…
原本是那么耀眼的太阳在地上,只能在其背后下发光的月亮在天上…
黄色的向日葵被染成了碧蓝色。
那副样子虽然很美丽…
努力绽放的向日葵,看起来反而是柔弱的存在。
在夜里向天空伸展的向日葵…
我在车内一直追寻着它的身影…
被夜晚的月光映照着的太阳。
被染成碧蓝色的太阳…
它的身影…我一直追寻着……
 
被月光照亮的天台上…
一个人影…
明明只是一个人影…却好像…在和什么东西对峙着一样…
皆守哥…
月下的立像,一个人影。
胸口在风中闪烁。
放在胸前的手里的是…那时的小刀。
和七年前同样的姿势。
唯一不同的是,那里的人影只有一个。
那把小刀,好像是被他自己刺入体内。
 
是诅咒…
这是理所当然的事…
那并不是什么精神病…
那是诅咒…
下在幸存的我们身上的…诅咒…
说不定,不仅仅是卓司哥…连由岐姐也在诅咒我们…
所以变成这种结果…
哥哥刺向了自己的胸口…
破坏了我的半身…
然后…还要把很多人送回到天空…
回归天空的日子。
交还灵魂的日子。
那一天,卓司哥对我做的事情。
杀了由岐姐的…那个行为…
他想要再一次实行…
这次…和很多人一起…
 
不是…
那是…我啊…
是那个…坡道的事情啊…
两个人一起看到向日葵的…那个坡道…
…我说要爬上那个坡道…要去寻找爸爸的灵魂…
我想,如果到了那个坡道的前方,就能取回爸爸的灵魂…爸爸就会复生的…
如果越过向日葵之路…向着向日葵所朝向的天空延伸的…那个大大的坡道的话…大概,就会有爸爸的灵魂…
爸爸的故乡的…大大的坡道…
 
哥哥的身体浮在空中…
我无言地跳了出去。
啊啊…是这样啊…
由岐姐也是这种心情啊…
并没有什么道理可言…
只是因为喜欢的人向着天空跳下去了…
我想要抓住那个身体…
我--
您正在打galgame,突然断电了,于是您跑去物管处问,结果发现是由于一个光头踢了变压器一脚导致的,
可能还要修很久,于是您决定想一个之前见过的数据结构题:
定义一个序列的权值为不同数字的个数,例如 [1,2,3,3] 权值为 3
现在有n个序列,我们在每个序列里面选一个连续非空子串,拼接起来,求所有选法得到的序列的权值之和
如果一个序列能通过多种方法被选择出来,那么计算多次
本题带修改操作,格式请参考输入格式
由于结果可能过大,请输出答案 mod 19260817 的结果

Input

第一行两个数 n,m,表示有n个序列,m次修改
然后n个数,第i个数是leni,表示第i个序列的长度
之后n行,每行leni个数,表示第i个序列
之后m行,每行三个数x,y,z表示将第x个序列的第y个元素改为z
1 <= n,m <= 100000,序列中的元素均为 32 位整型数,leni的和 <= 100000
共53组数据

Output

输出m + 1行,依次表示初始局面以及每次修改后的答案。

Sample Input

2 5
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
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.

BZOJ 5395--[Ynoi2016]谁的梦(STL&容斥)的更多相关文章

  1. [BZOJ 1042] [HAOI2008] 硬币购物 【DP + 容斥】

    题目链接:BZOJ - 1042 题目分析 首先 Orz Hzwer ,代码题解都是看的他的 blog. 这道题首先使用DP预处理,先求出,在不考虑每种硬币个数的限制的情况下,每个钱数有多少种拼凑方案 ...

  2. BZOJ 4671 异或图 | 线性基 容斥 DFS

    题面 Description 定义两个结点数相同的图 G1 与图 G2 的异或为一个新的图 G, 其中如果 (u, v) 在 G1 与 G2 中的出现次数之和为 1, 那么边 (u, v) 在 G 中 ...

  3. BZOJ.2301.[HAOI2011]Problem B(莫比乌斯反演 容斥)

    [Update] 我好像现在都看不懂我当时在写什么了=-= \(Description\) 求\(\sum_{i=a}^b\sum_{j=c}^d[(i,j)=k]\) \(Solution\) 首先 ...

  4. bzoj 4036: [HAOI2015]按位或【min-max容斥+FWT】

    其实也不是FWT--我也不知道刷FWT专题问什么会刷出来这个东西 这是min-max容斥讲解:https://www.zybuluo.com/ysner/note/1248287 总之就是设min(s ...

  5. BZOJ 2440 [中山市选2011]完全平方数 二分+容斥

    直接筛$\mu$?+爆算?再不行筛素数再筛个数?但不就是$\mu^2$的前缀和吗? 放...怕不是数论白学了$qwq$ 思路:二分+容斥 提交:两次(康了题解) 题解: 首先答案满足二分性质(递增), ...

  6. BZOJ 1042 [HAOI2008]硬币购物(完全背包+容斥)

    题意: 4种硬币买价值为V的商品,每种硬币有numi个,问有多少种买法 1000次询问,numi<1e5 思路: 完全背包计算出没有numi限制下的买法, 然后答案为dp[V]-(s1+s2+s ...

  7. BZOJ.4361.isn(DP 树状数组 容斥)

    题目链接 长度为\(i\)的不降子序列个数是可以DP求的. 用\(f[i][j]\)表示长度为\(i\),结尾元素为\(a_j\)的不降子序列个数.转移为\(f[i][j]=\sum f[i-1][k ...

  8. ural 1932 The Secret of Identifier 容斥

    主题链接:点击打开链接 stl+容斥 #include <cstdio> #include <cstring> #include <algorithm> #incl ...

  9. hdu 4336 Card Collector —— Min-Max 容斥

    题目:http://acm.hdu.edu.cn/showproblem.php?pid=4336 bzoj 4036 的简单版,Min-Max 容斥即可. 代码如下: #include<cst ...

随机推荐

  1. golang实现任务分发处理

    package main import ( "flag" "fmt" "os" "log" "net/http ...

  2. 【SQL模板】四.插入/更新 列模板TSQL

    ---Name: 插入/更新 列模板.sql ---Purpose: 用于更新 数据库中 列 的脚本模板 ---Author: xx ---Time: 2015-12-18 10:26:06 ---R ...

  3. mysql只保留一条有效数据,删除其他重复的数据

    delete from TableName where id in( SELECT ID FROM(SELECT * FROM TableName t0WHERE(t0.Field1,t0.Field ...

  4. win7系统administrator用户提示没有管理员权限,造装驱动安装错误,软件无法使用

    警告1909.无法创建快捷方式 最近使用windows 7 32位安装软件,好多都失败.出现以上类似错误. 解决方法:在系统盘(C:)右键属性“安全”选项卡--“编辑”,添加“Everyone”设置为 ...

  5. UI设计不就是画线框,凭什么年薪30W?

    作为一枚界面设计师 我真的很想为UI设计抱不平啊!! UI设计真是一个备受不解的职业 常会被误解,然后出现以下场景 程序欧巴: 界面画好没?按钮圆的方的不都能用吗?纠结那多干嘛? 产品经理: 这次我们 ...

  6. OSGi karaf-maven-plugin

    karaf-maven-plugin 1. 配制 karaf 启动时加载 bundle 项目中需要在 karaf 中集成 cxf-dosgi-discovery-distributed 特性,所以需要 ...

  7. 优秀UX设计师的八条黄金法则

    与用户保持亲密   成为成功的UX设计师最重要的先决条件之一就是与用户保持紧密的联系,以发现和了解他们的需求和爱好.理想情况下你应该让自己完全地成为产品用户,因为只有这样你才能理解背后的动机.“这样的 ...

  8. Python 的stat 模块

    #!/usr/bin/env python#-*- encoding:UTF-8 -*- import os,time,stat fileStats = os.stat ( 'test.txt' )  ...

  9. EnrichPipeline文档

    https://sourceforge.net/projects/enrichmentpipeline/

  10. iCn3D结构查看器的实现方法

    iCn3D Structure Viewer:iCn3D结构查看器 演示效果如下: 上面只是一个Basic UI的演示,如果要Advanced UI的话可以去NCBI官网看API