题面描述

红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为

$$\sum_{1\leqslant i < j\leqslant n}|v_{i}\times v_{j}|^{2}$$

由于电视会遭到大叔不同程度的暴击,电子的速度常常会发生变化.也就是说,有两种类型的操作:

•1 p x y将vp改为(x;y)

•2 l r询问[l,r]这段区间内的电子的飘升系数

这么简单的问题红莉栖当然能解决,但是她需要一个人帮忙验证一下结果的正确性.由于唯一帮得上忙的桶子去找菲利斯了,于是只能拜托你来完成这个任务了.答案对20170927取模即可.

输入描述

第一行两个整数n;m表示电子个数和询问个数.

接下来n行,每行两个整数x;y表示vi.

接下来m行,每行形如1 p x y或2 l r,分别表示两种操作.

输出描述

对于每个操作2,输出一行一个整数表示飘升系数对20170927取模的值.

样例输入

9 5
  13052925 5757314
  9968857 11135327
  13860145 3869873
  6912189 3461377
  2911603 7061332
  6334922 7708411
  5505379 5915686
  6806727 588727
  7603043 15687404
  2 1 6
  1 7 2602783 18398476
  1 8 8636316 19923037
  2 2 7
  2 2 4

样例输出

18529202
  963126
  19167545

分析

直接把式子拿过来化简(应该说是化成好维护的亚子)

$$\sum_{l\leqslant i < j\leqslant r}|v_i\times v_j|^{2}$$

$$=\sum_{l\leqslant i < j\leqslant r} (a_i\times b_j - a_j\times b_i)^{2}$$

$$=\left(\sum_{k=l}^r a_k^2\right)\left(\sum_{k=l}^r b_k^2\right)-\left(\sum_{k=l}^r a_kb_k\right)^2$$

于是就可以直接维护$\sum_{k=l}^r a_k^2$,$\sum_{k=l}^r b_k^2$,$\sum_{k=l}^r a_kb_k$,这些都可以用线段树区间合并维护

然而考场上我多维护了一个$\sum_{k=l}^r a_k^2b_k^2$,还没发现白维护了

以后还是要先拿纸和笔算算小范围的情况找规律再推大的情况。

而且这个题卡常,要写读入和输出优化(好像树状数组不需要来着?

Code

#include<cstdio>
const int mod=;
const int maxn=;
int n,m;
int sum[][maxn<<];
void print(int x){if(x>)print(x/);putchar(x%+'');}
int rd()
{
int f=,x=;char s=getchar();
while(s<''||s>''){if(s=='-')f=-;s=getchar();}
while(s>=''&&s<=''){x=x*+s-'';s=getchar();}return x*=f;
}
inline void fix(int id,int l,int r,int k,int x,int y)
{
if(l==r)
{
sum[][id]=1ll*x*x%mod,sum[][id]=1ll*y*y%mod,
sum[][id]=1ll*x*y%mod,sum[][id]=1ll*sum[][id]*sum[][id]%mod;return;
}
int mid=(l+r)/;k<=mid?fix(id*,l,mid,k,x,y):fix(id*+,mid+,r,k,x,y);
sum[][id]=(sum[][id*]+sum[][id*+])%mod;
sum[][id]=(sum[][id*]+sum[][id*+])%mod;
sum[][id]=(sum[][id*]+sum[][id*+])%mod;
sum[][id]=(sum[][id*]+sum[][id*+])%mod;
}
inline int que(int id,int l,int r,int l1,int r1,int tp)
{
if(r1<l||r<l1)return ;
if(l1<=l&&r<=r1)return sum[tp][id];
int mid=(l+r)/;return (que(id*,l,mid,l1,r1,tp)+que(id*+,mid+,r,l1,r1,tp))%mod;
}
int main()
{
n=rd();m=rd();
for(int i=,v1,v2;i<=n;i++)v1=rd(),v2=rd(),fix(,,n,i,v1,v2);
for(int i=,opt,l,r,x,y,k;i<=m;i++)
{
opt=rd();
if(opt==)k=rd(),x=rd(),y=rd(),fix(,,n,k,x,y);
if(opt==)
{
l=rd();r=rd();
int sum1=que(,,n,l,r,),sum2=que(,,n,l,r,),sum3=que(,,n,l,r,),sum4=que(,,n,l,r,);
int ans1=(1ll*sum1*sum2%mod-sum4+mod)%mod,ans2=(1ll*sum3*sum3%mod-sum4+mod)%mod;
print(((ans1-ans2)%mod+mod)%mod);puts("");
}
}
}

【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)的更多相关文章

  1. [CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)

    题目描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响. 选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为$$\sum \li ...

  2. csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解

    题面:https://www.cnblogs.com/Juve/articles/11625190.html 嘟嘟噜: 约瑟夫问题 第一种递归的容易re,但复杂度较有保证 第二种适用与n大于m的情况 ...

  3. 【CSP模拟赛】God knows (李超线段树)

    题面 CODE 稍微分析一下,发现把(i,pi)(i,p_i)(i,pi​)看做二维数点,就是求极长上升子序列的权值最小值. 直接李超线段树 #include <bits/stdc++.h> ...

  4. [NOIP10.6模拟赛]2.equation题解--DFS序+线段树

    题目链接: 咕 闲扯: 终于在集训中敲出正解(虽然与正解不完全相同),开心QAQ 首先比较巧,这题是\(Ebola\)出的一场模拟赛的一道题的树上强化版,当时还口胡出了那题的题解 然而考场上只得了86 ...

  5. 【CSP模拟赛】避难向导(倍增lca&树的直径)

    耐力OIer,一天7篇博客 题目描述 “特大新闻,特大新闻!全国爆发了一种极其可怕的病毒,已经开始在各个城市 中传播开来!全国陷入了巨大的危机!大量居民陷入恐慌,想要逃到其它城市以 避难!经调查显示, ...

  6. 【NOIP模拟赛】天神下凡 动态开点线段树

    这些圆一定是在同一水平面上的,由于他们没有相交,因此我们发现他们每个人与外界关系可以分为,1.存在并圈圈 2.存在圈圈并被割,因此我们把所有的圆都加1,把被割的在加1,就可以啦,因此我们开一个线段树, ...

  7. CSP模拟赛游记

    时间:2019.10.5 考试时间:100分钟(连正式考试时间的一半还没有到)题目:由于某些原因不能公开. 由于第一次接触NOIinux系统所以连怎么建文件夹,调字体,如何编译都不知道,考试的前半小时 ...

  8. 【BZOJ2741】【FOTILE模拟赛】L 分块+可持久化Trie树

    [BZOJ2741][FOTILE模拟赛]L Description FOTILE得到了一个长为N的序列A,为了拯救地球,他希望知道某些区间内的最大的连续XOR和. 即对于一个询问,你需要求出max( ...

  9. csp-s模拟测试55(9.29)联「线段树」·赛「??」题「神仙DP」

    T1 联 考试两个小时终于调过了,话说一个傻逼错最后还是静态查出错的..... 大概维护两个懒标记,一个区间覆盖,一个区间异或,然后保证每个区间只会存在一种懒标记. 然后维护区间0的个数,查询时查询那 ...

随机推荐

  1. 【洛谷 P3193】 [HNOI2008]GT考试(KMP,dp,矩阵乘法)

    题目链接 \(f[i][j]\)表示准考证号到第\(i\)位,不吉利数字匹配到第\(j\)位的方案数. 答案显然是\(\sum_{i=0}^{m-1}f[n][i]\) \(f[i][j]=\sum_ ...

  2. Java并发多线程面试题 Top 50

    不管你是新程序员还是老手,你一定在面试中遇到过有关线程的问题.Java语言一个重要的特点就是内置了对并发的支持,让Java大受企业和程序员的欢迎.大多数待遇丰厚的Java开发职位都要求开发者精通多线程 ...

  3. UCOSIII软件定时器

    API函数 //创建 void OSTmrCreate (OS_TMR *p_tmr, CPU_CHAR *p_name, OS_TICK dly, OS_TICK period, OS_OPT op ...

  4. ES5_对象 与 继承

    1. 对象的定义 //定义对象 function User(){ //在构造方法中定义属性 this.name = '张三'; this.age = 12; //在构造方法中定义方法: this.ru ...

  5. 3.kafka 基本配置

    1.主题管理 kafka-topics.sh工具脚本用于对主题操作,如创建.删除.修改.分区数.副本数及主题级别的配置. 1.1创建名为kafka-test主题,有2个副本,3个分区 [hadoop@ ...

  6. Availability-group DDL operations are permitted only when you are using the master database. Run the USE MASTER command, and retry your availability-group DDL command.

    Question: SQL SERVER  alwayson在向AG中添加DB最后一步在副本中将此DB添加入AG时报错: Availability-group DDL operations are p ...

  7. Mongodb的主从复制

    主从服务器的实现原理 首先,主节点会把本服务的与写有关的操作记录下来,读操来不记录,这些操作就记录在local数据库中的oplog.$admin这个集合中,这是一个固定集合,大小是可以配置的,主要是通 ...

  8. 2019牛客多校第三场 F.Planting Trees

    题目链接 题目链接 题解 题面上面很明显的提示了需要严格\(O(n^3)\)的算法. 先考虑一个过不了的做法,枚举右下角的\((x,y)\),然后二分矩形面积,枚举其中一边,则复杂度是\(O(n^3 ...

  9. 结构型模式(七) 代理模式(Proxy)

    一.动机(Motivate) 在面向对象系统中,有些对象由于某种原因(比如对象创建的开销很大,或者某些操作需要安全控制,或者需要进程外的访问等),直接访问会给使用者.或者系统结构带来很多麻烦.如何在不 ...

  10. Python——python3的requests模块的导入

    前言 突然就要搞python,我这个心哦~ 版本 | python 3.7 步骤 配置环境变量 右击-->属性-->打开文件位置 进入到脚本目录: C:\Users\Administrat ...