题面描述

红莉栖想要弄清楚楼下天王寺大叔的显像管电视对“电话微波炉(暂定)”的影响.选取显像管的任意一个平面,一开始平面内有个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. 【开发笔记】- MD5加密

    主要用于对用户密码的加密,保护用户账户安全: /** * @author shenruihai * */ import java.security.MessageDigest; import org. ...

  2. 4.linux下配置Golang的环境变量

    装好linux后优先在linux上配置Golang开发环境. 1.到Go语言中文网下载Linux安装包 https://studygolang.com/dl 2.到下载的目录下解压,下载的文件一般在“ ...

  3. 关于Eclipse导入maven项目报空指针异常

    今天新建了一个maven项目,因为是通过公司的工具新建的,代码拉下来就有src.pom.xml文件. 导入Eclipse却报空指针异常.具体如下: An error has occurred. See ...

  4. PHP 中使用ajax时一些常见错误总结整理

    这篇文章主要介绍了PHP 中使用ajax时一些常见错误总结整理的相关资料,需要的朋友可以参考下 PHP作为后端时,前端js使用ajax技术进行相互信息传送时,经常会出错误,对于新手来说有些手足无措.总 ...

  5. JavaScript箭头函数中的this详解

    前言 箭头函数极大地简化了this的取值规则. 普通函数与箭头函数 普通函数指的是用function定义的函数: var hello = function () { console.log(" ...

  6. sqlite移植

    编译 # tar xvf sqlite-3.6.16.tar.gz # cd sqlite-3.6.16 # ./configure # ./configure --host=arm-linux -- ...

  7. 【Linux下Hadoop-eclipse-plus-3.2.0】编译Hadoop连接eclipse的插件遇见的一系列错误,崩溃的操作

    2019-09-02 23:35:22 前言:首先,我想吐槽下自己,居然花费了4到5个夜晚和中午的时间来做这件事情,直到刚才才顺利解决,我也挺佩服自己的! 我在这个过程中参考其他人的博客,非常感谢他们 ...

  8. ISCC之msc4

    一开始拿到题目的时候有点懵的,给个gif图片,233 常规分析,gif打开看一看,发现gif是多张图片组成,于是用fastStone Image viewer分解成九张图片 后面用PS拼起来,得到一个 ...

  9. 1206 BBS注册

    目录 昨日内容 BBS项目 1.项目开发流程 2.表设计 用户表 个人站点表 文章标签表 文章分类表 文章表 文章的点赞点踩表 文章的评论表 项目 昨日内容 昨日内容 基于django中间件实现功能的 ...

  10. test20190519 NOIP 模拟赛 3

    序列 [问题描述] 作为一名火星人,你为了占领地球,需要想方设法使地球人失去信心.现在你获得了一项能力,控制今后 n 天的天气温度,对于第 i 天,你能将温度控制在[ai,bi]中任意一个数字, 你的 ...