传送门

题解

题解里面说得很清楚了。

大约就是单独考虑每个数的贡献,然后看一下每个序列里有多少区间是没有这个数的,乘起来就好了。

为了处理修改我们需要每个值建一棵线段树来搞,但是窝zz了,写了线段树套线段树,比正解多一个log。

一开始想着不调map、set,然后发现特别难写。最后还是调了map……

比赛的时候挂了0没有逆元的坑啊!

#include<map>
#include<cstdio>
#include<algorithm>
#define pii pair
#define mpii make_pair
#define MN 410000
using namespace std;
int read_p,read_ca,read_f;
inline int read(){read_p=0;read_ca=getchar();read_f=1;while(read_ca<'0'||read_ca>'9') {if (read_ca=='-') read_f=-1;read_ca=getchar();}while(read_ca>='0'&&read_ca<='9') read_p=read_p*10+read_ca-48,read_ca=getchar();return read_p*read_f;
}
const int MOD=19260817;
struct na{int p,*st;}Y[MN<<1];
bool operator < (na a,na b){return a.p<b.p;}
inline void M(int &x){while(x>=MOD)x-=MOD;while(x<0)x+=MOD;}
int n,m,L[MN],a[MN],ro[MN],RO[MN*40],ls[MN*40],rs[MN*40],LS[MN*100],RS[MN*100],S[MN*100],NUM,x[MN],y[MN],z[MN],T=0,num=0,_num=0,mmh[MN],MMH=1,t[MN],w[MN],ze[MN];
void ADD(int &p,int l,int r,int pos,int v){if (!p) p=++_num;S[p]+=v;if (l==r) return;int mid=l+r>>1;if (pos<=mid) ADD(LS[p],l,mid,pos,v);else ADD(RS[p],mid+1,r,pos,v);
}
void add(int &p,int l,int r,int pos,int x,int v){if (!p) p=++num;ADD(RO[p],1,T,x,v);if (l==r) return;int mid=l+r>>1;if (pos<=mid) add(ls[p],l,mid,pos,x,v);else add(rs[p],mid+1,r,pos,x,v);
}
int ASK(int p,int l,int r,int k){if (!p) return 0;if (l==r) return S[p];int mid=l+r>>1;return k<=mid?ASK(LS[p],l,mid,k):ASK(RS[p],mid+1,r,k);
}
int p_ask(int p,int l,int r,int pos,int x){if (ASK(RO[p],1,T,x)==0) return -1;if (pos<=l) return -1;if (l==r) return l;int mid=l+r>>1;int w=p_ask(rs[p],mid+1,r,pos,x);if (w!=-1) return w;return p_ask(ls[p],l,mid,pos,x);
}
int s_ask(int p,int l,int r,int pos,int x){if (ASK(RO[p],1,T,x)==0) return -1;if (pos>=r) return -1;if (l==r) return l;int mid=l+r>>1;int w=s_ask(ls[p],l,mid,pos,x);if (w!=-1) return w;return s_ask(rs[p],mid+1,r,pos,x);
}
inline int mi(int x,int y){int mmh=1;while (y){if (y&1) mmh=1LL*mmh*x%MOD;x=1LL*x*x%MOD;y>>=1;}return mmh;
}
map<pii<int,int>,int> ma;
map<pii<int,int>,int>::iterator it;
inline void del(int x,int v){if(!ze[v])M(MMH+=mmh[v]);if (ma.find(mpii(x,v))==ma.end()) ma[mpii(x,v)]=1LL*(L[x]-L[x-1])*(L[x]-L[x-1]+1)/2%MOD;if (!ma[mpii(x,v)]) ze[v]--;else mmh[v]=1LL*mmh[v]*mi(ma[mpii(x,v)],MOD-2)%MOD;
}
inline void add(int x,int v){if (!ma[mpii(x,v)]) ze[v]++;else mmh[v]=1LL*mmh[v]*ma[mpii(x,v)]%MOD;if(!ze[v])M(MMH-=mmh[v]);}
int main(){n=read();m=read();for (int i=1;i<=n;i++) L[i]=L[i-1]+read();for (int i=1;i<=n;i++){for (int j=L[i-1];j<L[i];j++) Y[++NUM].p=a[j]=read(),Y[NUM].st=&a[j];MMH=1LL*(L[i]-L[i-1])*(L[i]-L[i-1]+1)/2%MOD*MMH%MOD;}for (int i=1;i<=m;i++) x[i]=read(),y[i]=read(),Y[++NUM].p=z[i]=read(),Y[NUM].st=&z[i];sort(Y+1,Y+1+NUM);for (int i=1;i<=NUM;i++) T+=i==1||Y[i].p!=Y[i-1].p,*Y[i].st=T;for (int i=1;i<=T;i++) mmh[i]=MMH,ze[i]=0;MMH=1LL*MMH*T%MOD;for (int i=1;i<=n;i++)for (int j=L[i-1];j<L[i];j++)add(ro[i],1,L[i]-L[i-1],j-L[i-1]+1,a[j],1);for (int i=1;i<=n;i++){for (int j=L[i-1];j<L[i];j++)if (!t[a[j]]) w[j]=(1LL*(j-L[i-1]+1)*(j-L[i-1])>>1)%MOD,t[a[j]]=j+1;else w[j]=((1LL*(j+1-t[a[j]])*(j-t[a[j]])>>1)+w[t[a[j]]-1])%MOD,t[a[j]]=j+1;int s=mi(1LL*(L[i]-L[i-1])*(L[i]-L[i-1]+1)/2%MOD,MOD-2);for (int j=L[i]-1;j>=L[i-1];j--) if (t[a[j]]){M(w[j]+=1LL*(L[i]-t[a[j]]+1)*(L[i]-t[a[j]])/2%MOD);mmh[a[j]]=1LL*mmh[a[j]]*s%MOD;if (!w[j]) ze[a[j]]++;else mmh[a[j]]=1LL*mmh[a[j]]*w[j]%MOD;ma[mpii(i,a[j])]=w[j];t[a[j]]=0;}}for (int i=1;i<=T;i++) if (!ze[i]) M(MMH-=mmh[i]);printf("%d\n",MMH);for (int i=1;i<=m;i++){int pos=L[x[i]-1]+y[i]-1;del(x[i],a[pos]);del(x[i],z[i]);int l=p_ask(ro[x[i]],1,L[x[i]]-L[x[i]-1],y[i],a[pos]),r=s_ask(ro[x[i]],1,L[x[i]]-L[x[i]-1],y[i],a[pos]);if (l==-1) l=0;if (r==-1) r=L[x[i]]-L[x[i]-1]+1;it=ma.find(mpii(x[i],a[pos]));M(it->second+=1LL*(r-y[i])*(y[i]-l)%MOD);l=p_ask(ro[x[i]],1,L[x[i]]-L[x[i]-1],y[i],z[i]),r=s_ask(ro[x[i]],1,L[x[i]]-L[x[i]-1],y[i],z[i]);if (l==-1) l=0;if (r==-1) r=L[x[i]]-L[x[i]-1]+1;it=ma.find(mpii(x[i],z[i]));M(it->second-=1LL*(r-y[i])*(y[i]-l)%MOD);add(x[i],a[pos]);add(x[i],z[i]);add(ro[x[i]],1,L[x[i]]-L[x[i]-1],y[i],a[pos],-1);add(ro[x[i]],1,L[x[i]]-L[x[i]-1],y[i],z[i],1);a[pos]=z[i];printf("%d\n",MMH);}
}

View Code

转载于:https://www.cnblogs.com/Enceladus/p/7115321.html

LibreOJ β Round #2 E. 数论只会 GCD相关推荐

  1. “东信杯”广西大学第一届程序设计竞赛(同步赛)D、数论只会GCD 【博弈 分类讨论】...

    传送门:https://ac.nowcoder.com/acm/contest/283/D 题目描述 小西买了一堆肥宅快乐水和肥宅快乐茶,准备和室友比谁更肥宅. 快乐水有A瓶,快乐茶B瓶. 小西和室友 ...

  2. libreoj #514. 「LibreOJ β Round #2」模拟只会猜题意

    给定一个长度为 nnn 的序列 AAA . 定义 f(l,r)=∑i=lrAif(l,r)=\sum_{i=l}^{r} A_{i}f(l,r)=∑​i=l​r​​A​i​​. 询问 mmm 次,每次 ...

  3. #530. 「LibreOJ β Round #5」最小倍数 二分 + 数论

    传送门 文章目录 题意: 思路: 题意: 思路: 本来想刷数位dpdpdp,无意间碰到了这个题来水水. 我们知道n!n!n!中质因子ppp的个数为∑i=1npi\sum_{i=1} \frac{n}{ ...

  4. 「LibreOJ Round #11」Misaka Network 与求和(杜教筛 + Min_25)

    #572. 「LibreOJ Round #11」Misaka Network 与求和 推式子 ∑i=1n∑j=1nf(gcd(i,j))k∑d=1nf(d)k∑i=1nd∑j=1nd[gcd(i,j ...

  5. [LOJ #521]「LibreOJ β Round #3」绯色 IOI(抵达)(结论)

    #521. 「LibreOJ β Round #3」绯色 IOI(抵达) description solution 因为点的庇护所不能为自身,题目背景在树上,有结论一定是两个相邻点互为庇护所 所以树一 ...

  6. LibreOJ545. 「LibreOJ β Round #7」小埋与游乐场【网络流】

    545. 「LibreOJ β Round #7」小埋与游乐场 [题目描述] 传送门 [题解] 网络流,我们发现lowbit之后相同的点连出的边是相同的,所以可以缩点. [代码如下] #include ...

  7. [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机)

    [LOJ#522]「LibreOJ β Round #3」绯色 IOI(危机) 试题描述 IOI 的比赛开始了.Jsp 和 Rlc 坐在一个角落,这时他们听到了一个异样的声音 -- 接着他们发现自己收 ...

  8. Loj#572. 「LibreOJ Round #11」Misaka Network 与求和

    题目 有生之年我竟然能\(A\) 这个题求的是这个 \[\sum_{i=1}^n\sum_{j=1}^nf(gcd(i,j))^k\] \(f(i)\)定义为\(i\)的次大质因子,其中\(f(p)= ...

  9. [LOJ]#572. 「LibreOJ Round #11」Misaka Network 与求和 min_25筛+杜教筛

    Solution 推一下式子,容易得到一个线性做法:∑d=1nfk(d)((2∑i=1⌊ni⌋φ(i))−1)\sum_{d=1}^nf^k(d)((2\sum_{i=1}^{\lfloor{n\ov ...

  10. LibreOJ β Round #2

    这套题目真的不错,难度区分还是挺好的,后面的题目恕我愚笨,搞不定. 先看看前面几个吧--- A. 模拟只会猜题意 内存限制:256 MiB 时间限制:1000 ms 标准输入输出 题目类型:传统 评测 ...

最新文章

  1. 阿里云智能 AIoT 首席科学家丁险峰:阿里全面进军IoT这一年 | 问底中国IT技术演进...
  2. 【技术干货】卷积神经网络中十大拍案叫绝的操作
  3. Codeforces 815 B Karen and Test 杨辉三角 组合数学
  4. python使用方法-六、python 方法的使用
  5. 自己动手构建iSCSI磁盘阵列
  6. 动态路由选择协议简介
  7. Facebook 约十亿美元收购脑机技术公司,助攻AR研发;苹果宣布新款 Mac Pro 在美国生产;谷歌称已实现量子霸权…...
  8. v html是双向绑定吗,vue自定v-model实现表单数据双向绑定问题
  9. 开源 免费 java CMS - FreeCMS1.5 标签 visit
  10. Freemodbus 1.5
  11. Go语言中的结构体 (struct)
  12. Zerotier Moon服务器配置
  13. 屏幕录像专家android,屏幕录像专家
  14. Tera Term 工具的使用
  15. android获取版本信息、屏幕信息和设备编号
  16. 学习Photoshop的一些网站以及找素材的网站
  17. android studio linux 字体,Android Studio代码字体模糊解决方法
  18. python的openpyxl模块合并单元格,浅谈openpyxl库,遇到批量合并单元格的问题
  19. C++ 内联函数/宏/outo/for/nullptr
  20. 小程序获取oppenid时返回40125或者40029

热门文章

  1. php是哪种化学药剂,常用化学试剂 英文缩写一览表
  2. 摆动式运输机运动分析_三河燕郊人民医院设备资讯(第28期):SW—3702精子分析仪...
  3. Python 中的 if __name__ == '__main__'
  4. Linux shell 上机编程-----习题
  5. CentOS 6.5下安装MySQL后重置root密码方法
  6. 使用css3背景渐变中的透明度来设置不同颜色的背景渐变
  7. Hadoop MapReduce篇
  8. 使用jQuery的load()进行页面模块化加载
  9. [转]UML建模的要点总结
  10. SOME/IP不等同于SOA,CommonAPI-RPC通信和vsomeip基于消息通信