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

红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响。
选取显像管的任意一个平面,一开始平面内有个$n$电子,初始速度分别为$v_i$,定义飘升系数为
$$\sum \limits_{1\leqslant i<j\leqslant n}|v_i\times v_j|^2$$
由于电视会遭到大叔不同程度的暴击,电子的速度常常会发生变化。也就是说,有两种类型的操作:
$\bullet 1\ p\ x\ y$将$v_p$改为$(x,y)$
$\bullet 2\ l\ r$询问$[l,r]$这段区间内的电子的飘升系数
这么简单的问题红莉栖当然能解决,但是她需要一个人帮忙验证一下结果的正确性。
由于唯一帮得上忙的桶子去找菲利斯了,于是只能拜托你来完成这个任务了。答案对$20170927$取模即可。
输入格式
第一行两个整数$n,m$表示电子个数和询问个数。
接下来$n$行,每行两个整数$x,y$表示$v_i$。
接下来$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
数据范围与提示

对于$100\%$的数据,$1\leqslant n,m\leqslant 10^6,0\leqslant x_i,y_i<20170927,1\leqslant l_i\leqslant r_i\leqslant n$。
题解
我依($qing$)稀($chu$)记得波波老师让我出过这道题的数据,就是题面动了一点,时间限制调小了(当时我还是挺慌的,原题$4s$,现在这个时限我的代码都跑不过我的数据……),但是我还是打了,然后它就$A$了……
简单说一下,上面那个鬼畜的$\times$其实是叉积也就是:
$v_1=(x_1,y_1),v_2=(x_2,y_2) \Rightarrow \vec{v_1}\times \vec{v_2}=x_1\times y_2-x_2\times y_1$。
初步是这样的:$\large \begin{array}{ll} ans &=& \sum \limits_{i=l}^r \sum \limits_{j=i+1}^r (v_i \times v_j)^2 \\ &=& \sum \limits_{i=l}^r \sum \limits_{j=i+1}^r (x_iy_j-x_jy_i)^2 \end{array}$
那么我们化简一下上面那个式子即可得到:
$\large \begin{array}{ll} ans &=& \sum \limits_{i=l}^{r} \sum \limits_{j=i+1}^r (x_i^2y_j^2+x_j^2y_i^2-2x_iy_ix_jy_j) \\ &=& \sum \limits_{i=l}^r \sum \limits_{j=i+1}^r x_i^2y_j^2 + \sum \limits_{i=l}^r \sum \limits_{j=i+1}^r x_j^2y_i^2 - \sum \limits_{i=l}^r \sum \limits_{j=i+1}^r 2x_iy_ix_jy_j \\ &=& \sum \limits_{i=l}^r \sum \limits_{j=l}^r [i!=j]\times x_i^2y_j^2 - \sum \limits_{i=l}^r \sum \limits_{j=l}^r [i!=j]\times x_iy_ix_jy_j \\ &=& \sum \limits_{i=l}^r x_i^2 (\sum \limits_{j=l}^r y_j^2 -y_i^2) - (\sum \limits_{i=l}^r x_iy_i (\sum \limits_{j=l}^r x_jy_j - x_iy_i)) \\ &=& \sum \limits_{i=l}^r x_i^2 \sum \limits_{j=l}^r y_j^2 - \sum \limits_{i=l}^r x_i^2y_i^2 - (\sum \limits_{i=l}^r x_iy_i \sum \limits_{j=l}^r x_jy_j - \sum \limits_{i=l}^r x_i^2 y_i^2) \\ &=& \sum \limits_{i=l}^r x_i^2\times \sum \limits_{i=l}^ry_i^2 - (\sum \limits_{i=l}^r x_iy_i)^2\end{array}$
有了这个式子,我们就可以用三个树状数组维护分别维护$\sum \limits_{i=l}^r x_i^2$,$\sum \limits_{i=l}^r y_i^2$,$\sum \limits_{i=l}^r x_iy_i$即可。
时间复杂度:$\Theta((n+m)\log n)$。
期望得分:$100$分。
实际得分:$100$分。
代码时刻
#include<bits/stdc++.h>
using namespace std;
const int mod=20170927;
int n,m;
long long tr[3][4000001];
pair<long long,long long> e[1000001];
void add(int x,long long val,int id)
{
for(int i=x;i<=n;i+=i&-i)
tr[id][i]=(tr[id][i]+val)%mod;
}
long long query(int x,int id)
{
long long res=0;
for(int i=x;i;i-=i&-i)
res=(res+tr[id][i])%mod;
return res;
}
long long ask(int l,int r,int id)
{
return (query(r,id)-query(l-1,id)+mod)%mod;
}
int main()
{
scanf("%d%d",&n,&m);
for(int i=1;i<=n;i++)
{
scanf("%lld%lld",&e[i].first,&e[i].second);
add(i,e[i].first*e[i].first,0);
add(i,e[i].second*e[i].second,1);
add(i,e[i].first*e[i].second,2);
}
while(m--)
{
int op;
scanf("%d",&op);
if(op==1)
{
int p;
long long x,y;
scanf("%d%lld%lld",&p,&x,&y);
add(p,(x*x%mod-e[p].first*e[p].first%mod+mod)%mod,0);
add(p,(y*y%mod-e[p].second*e[p].second%mod+mod)%mod,1);
add(p,(x*y%mod-e[p].first*e[p].second%mod+mod)%mod,2);
e[p]=make_pair(x,y);
}
else
{
int l,r;
scanf("%d%d",&l,&r);
long long res=ask(l,r,0)*ask(l,r,1)%mod,res1=ask(l,r,2);
res=(res-(res1*res1%mod)+mod)%mod;
printf("%lld\n",res);
}
}
return 0;
}
rp++
[CSP-S模拟测试]:天才绅士少女助手克里斯蒂娜(数学+树状数组)的更多相关文章
- csps-s模拟测试60嘟嘟噜,天才绅士少女助手克里斯蒂娜,凤凰院凶真题解
题面:https://www.cnblogs.com/Juve/articles/11625190.html 嘟嘟噜: 约瑟夫问题 第一种递归的容易re,但复杂度较有保证 第二种适用与n大于m的情况 ...
- 【CSP模拟赛】天才绅士少女助手克里斯蒂娜(线段树&读入优化&输出优化)
题面描述 红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个n电子,初始速度分别为vi,定义飘升系数为 $$\sum_{1\leqsl ...
- [CSP-S模拟测试]:小P的单调数列(树状数组+DP)
题目描述 小$P$最近喜欢上了单调数列,他觉得单调的数列具有非常多优美的性质.经过小$P$复杂的数学推导,他计算出了一个单调增数列的艺术价值等于该数列中所有书的总和.并且以这个为基础,小$P$还可以求 ...
- [CSP-S模拟测试]:Equation(数学+树状数组)
题目描述 有一棵$n$个点的以$1$为根的树,以及$n$个整数变量$x_i$.树上$i$的父亲是$f_i$,每条边$(i,f_i)$有一个权值$w_i$,表示一个方程$x_i+x_{f_i}=w_i$ ...
- 「模拟赛20191019」C 推式子+贪心+树状数组
题目描述 给定一棵\(n\)个点的有根树,根节点编号为\(1\),点有点权. 定义\(d(v)\)表示\(v\)到\(1\)的路径上的边数. 定义\(f(v,u)\)在\(v<u\)且\(v\) ...
- hdoj--1556--Color the ball(模拟&&树状数组)
Color the ball Time Limit: 9000/3000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) T ...
- PAT甲题题解-1095. Cars on Campus(30)-(map+树状数组,或者模拟)
题意:给出n个车辆进出校园的记录,以及k个时间点,让你回答每个时间点校园内的车辆数,最后输出在校园内停留的总时间最长的车牌号和停留时间,如果不止一个,车牌号按字典序输出. 几个注意点: 1.如果一个车 ...
- 【洛谷】NOIP提高组模拟赛Day2【动态开节点/树状数组】【双头链表模拟】
U41571 Agent2 题目背景 炎炎夏日还没有过去,Agent们没有一个想出去外面搞事情的.每当ENLIGHTENED总部组织活动时,人人都说有空,结果到了活动日,却一个接着一个咕咕咕了.只有不 ...
- 「模拟赛20180306」回忆树 memory LCA+KMP+AC自动机+树状数组
题目描述 回忆树是一棵树,树边上有小写字母. 一次回忆是这样的:你想起过往,触及心底--唔,不对,我们要说题目. 这题中我们认为回忆是这样的:给定 \(2\) 个点 \(u,v\) (\(u\) 可能 ...
随机推荐
- Ultra.Base
winform 基础类库 https://github.com/ZixiangBoy/Ultra.Base
- 【ABAP系列】SAP ABAP中将字符格式的金额转换为数值的函数
公众号:SAP Technical 本文作者:matinal 原文出处:http://www.cnblogs.com/SAPmatinal/ 原文链接:[ABAP系列]SAP ABAP中将字符格式的金 ...
- IIS下如何配置免费的https
1.首先我们要取走我们的证书,保存在我们本地的电脑里,然后复制到服务器即可. 2.取走后接下来干嘛?当然是打开文件看看里面有些什么啊.我们找到IIS那个压缩包并解压. 3.解析得到pfx文件,也就是我 ...
- vuer-cli 安装笔记
电脑上装 的软件全卸载了.需要 重装 .整理了一下vue-cli脚手架搭建 1 先下载git 2 再下载node 3安装淘宝镜像 (https://npm.taobao.org/) 4 安装webpa ...
- js之模板方法模式
模板方法模式的定义和组成: 模板方法模式是一种只需使用继承就可以实现的非常简单的模式. 模板方法模式由两部分结构组成,第一部分是抽象父类,第二部分是具体的实现子类.通常在抽象父类中封装了子类的算法框架 ...
- python基础-4 函数参数引用、lambda 匿名函数、内置函数、处理文件
上节课总结 1.三元运算 name=“name1”if 条件 else “name2” 2.深浅拷贝 数字.字符串 深浅,都一样 2.其他 浅拷贝:只拷贝第一层 深拷贝:不拷贝最后一层 3.set集合 ...
- Nacos1.1.3小试牛刀
什么是 Nacos(摘自https://nacos.io/zh-cn/docs/quick-start.html) Nacos 致力于帮助您发现.配置和管理微服务.Nacos 提供了一组简单易用的特性 ...
- Navicat批量导出mysql的DDL语句
工作中有的时候需要将某个库中的表.视图.函数.存储过程等创建语句导出,又不需要表中的数据.同时最好放在同一个文件里面,这样方便拷贝. 方法一:需要拷贝的创建语句条数不多,不至于让你拷到头脑发晕的地步, ...
- Java枚举enum关键字
枚举的理解 枚举其实就是一个类,枚举类的实例是一组限定的对象 传统的方式创建枚举 [了解] 对比:单例类 1.构造器私有化 2.本类内部创建对象 3.通过public static方法,对外暴露该对象 ...
- 初探LINUX之--基础知识篇
一 Linux哲学思想 1 一切都是一个文件(包含硬件) 2 小型,单一用途的程序 3 链接程序,共同完成复杂的任务 4 避免令人困惑的用户界面 5 配置数据存储在文本中 二 Linux重要概念 Sh ...