天才绅士少女助手克里斯蒂娜天才绅士少女助手克里斯蒂娜天才绅士少女助手克里斯蒂娜


最初想法\color{blue}{最初想法}最初想法

∑i=lr∑j=i+1r(xiyj−xjyi)2=∑i=lrxi2∑j=i+1ryj2+∑i=lryi2∑j=i+1rxj2−2∑i=lrxiyi∑j=i+1rxjyj\begin{aligned}&\ \ \ \ \sum_{i=l}^{r}\sum_{j=i+1}^r(x_iy_j-x_jy_i)^2 \\ &= \sum_{i=l}^rx_i^2\sum_{j=i+1}^ry_j^2 + \sum_{i=l}^ry_i^2\sum_{j=i+1}^rx_j^2-2\sum_{i=l}^rx_iy_i\sum_{j=i+1}^rx_jy_j\\ \end{aligned}​    i=l∑r​j=i+1∑r​(xi​yj​−xj​yi​)2=i=l∑r​xi2​j=i+1∑r​yj2​+i=l∑r​yi2​j=i+1∑r​xj2​−2i=l∑r​xi​yi​j=i+1∑r​xj​yj​​

然后处理前缀和, 时间复杂度 O(N2)O(N^2)O(N2) .


正解部分\color{red}{正解部分}正解部分

接着上式化简得

∑i=lrxi2∑j=i+1ryj2+∑i=lryi2∑j=i+1rxj2−2∑i=lrxiyi∑j=i+1rxjyj=∑i=lrxi2∑j=i+1ryj2+∑i=lrxi2∑j=li−1yj2−(∑i=lrxiyi∑j=lrxjyj−∑i=lrxi2yi2)=∑i=lrxi2(∑j=lryj2−yi2)−∑i=lrxiyi∑j=lrxjyj+∑i=lrxi2yi2=∑i=lrxi2∑j=lryj2−∑i=lrxi2yi2−∑i=lrxiyi∑j=lrxjyj+∑i=lrxi2yi2=∑i=lrxi2∑j=lryj2−∑i=lrxiyi∑j=lrxjyj\begin{aligned} &\ \ \ \ \sum_{i=l}^rx_i^2\sum_{j=i+1}^ry_j^2 + \sum_{i=l}^ry_i^2\sum_{j=i+1}^rx_j^2-2\sum_{i=l}^rx_iy_i\sum_{j=i+1}^rx_jy_j\\ &= \sum_{i=l}^rx_i^2\sum_{j=i+1}^ry_j^2 + \sum_{i=l}^rx_i^2\sum_{j=l}^{i-1}y_j^2 - (\sum_{i=l}^rx_iy_i\sum_{j=l}^rx_jy_j - \sum_{i=l}^r x_i^2y_i^2)\\ &= \sum_{i=l}^rx_i^2(\sum_{j=l}^ry_j^2 - y_i^2) - \sum_{i=l}^rx_iy_i\sum_{j=l}^rx_jy_j + \sum_{i=l}^r x_i^2y_i^2\\ &= \sum_{i=l}^rx_i^2\sum_{j=l}^ry_j^2 - \sum_{i=l}^rx_i^2y_i^2 - \sum_{i=l}^rx_iy_i\sum_{j=l}^rx_jy_j + \sum_{i=l}^r x_i^2y_i^2 \\ &= \sum_{i=l}^rx_i^2\sum_{j=l}^ry_j^2 - \sum_{i=l}^rx_iy_i\sum_{j=l}^rx_jy_j \end{aligned}​    i=l∑r​xi2​j=i+1∑r​yj2​+i=l∑r​yi2​j=i+1∑r​xj2​−2i=l∑r​xi​yi​j=i+1∑r​xj​yj​=i=l∑r​xi2​j=i+1∑r​yj2​+i=l∑r​xi2​j=l∑i−1​yj2​−(i=l∑r​xi​yi​j=l∑r​xj​yj​−i=l∑r​xi2​yi2​)=i=l∑r​xi2​(j=l∑r​yj2​−yi2​)−i=l∑r​xi​yi​j=l∑r​xj​yj​+i=l∑r​xi2​yi2​=i=l∑r​xi2​j=l∑r​yj2​−i=l∑r​xi2​yi2​−i=l∑r​xi​yi​j=l∑r​xj​yj​+i=l∑r​xi2​yi2​=i=l∑r​xi2​j=l∑r​yj2​−i=l∑r​xi​yi​j=l∑r​xj​yj​​


实现部分\color{red}{实现部分}实现部分

使用树状数组维护即可 .

#include<bits/stdc++.h>
#define reg register
typedef long long ll;int read(){char c;int s = 0, flag = 1;while((c=getchar()) && !isdigit(c))if(c == '-'){ flag = -1, c = getchar(); break ; }while(isdigit(c)) s = s*10 + c-'0', c = getchar();return s * flag;
}const int maxn = 1000005;
const int mod = 20170927;int N;
int M;ll v[maxn][2];struct Bit_Tree{ll v[maxn];void Add(int k, ll p){ p%=mod; while(k<=N)v[k]+=p,k+=k&-k; }ll Query(int k){ ll s = 0; while(k)s+=v[k],s%=mod,k-=k&-k; return s; }
} bit_t[3];void Work(){int opt = read();if(opt == 1){int pos = read();bit_t[0].Add(pos, -v[pos][0]*v[pos][0]);bit_t[1].Add(pos, -v[pos][1]*v[pos][1]);bit_t[2].Add(pos, -v[pos][0]*v[pos][1]);v[pos][0] = read(), v[pos][1] = read();bit_t[0].Add(pos, v[pos][0]*v[pos][0]);bit_t[1].Add(pos, v[pos][1]*v[pos][1]);bit_t[2].Add(pos, v[pos][0]*v[pos][1]);}else{int l = read(), r = read();ll Tmp_1 = bit_t[0].Query(r) - bit_t[0].Query(l-1);ll Tmp_2 = bit_t[1].Query(r) - bit_t[1].Query(l-1);ll Tmp_3 = bit_t[2].Query(r) - bit_t[2].Query(l-1);Tmp_1 = (Tmp_1 % mod + mod) % mod;Tmp_2 = (Tmp_2 % mod + mod) % mod;Tmp_3 = (Tmp_3 % mod + mod) % mod;printf("%lld\n", ( (Tmp_1*Tmp_2%mod) - (Tmp_3*Tmp_3%mod) + mod ) % mod);}
}int main(){N = read(), M = read();for(reg int i = 1; i <= N; i ++) v[i][0] = read(), v[i][1] = read(); for(reg int i = 1; i <= N; i ++){bit_t[0].Add(i, v[i][0]*v[i][0]);bit_t[1].Add(i, v[i][1]*v[i][1]);bit_t[2].Add(i, v[i][0]*v[i][1]);}while(M --) Work();return 0;
}

天才绅士少女助手克里斯蒂娜 [数学+树状数组]相关推荐

  1. JZOJ5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜

    题解 viv_i是一个向量, 那么需要求的就是叉积的平方和. 假设v1=(x1,y1),v2=(x2,y2)v_1=(x_1,y_1),v_2=(x_2,y_2) 那么v1∗v2=x1∗y2−x2∗y ...

  2. JZOJ 5422. 【NOIP2017提高A组集训10.25】天才绅士少女助手克里斯蒂娜

    Description Input 第一行两个整数n;m 表示电子个数和询问个数. 接下来n 行, 每行两个整数x; y 表示vi. 接下来m 行, 每行形如1 p x y 或2 l r, 分别表示两 ...

  3. Jzoj5422 天才绅士少女助手克里斯蒂娜

    居然是向量叉乘!考场上忘了怎么叉乘了... 考完后发现可以推一波式子 Σ(aj*bk-ak*bj)^2{1<=j<k<=n}=(Σak^2)*(Σbk^2)-(Σak*bk)^2 { ...

  4. HDU 5869 Different GCD Subarray Query 树状数组 + 一些数学背景

    http://acm.hdu.edu.cn/showproblem.php?pid=5869 题意:给定一个数组,然后给出若干个询问,询问[L, R]中,有多少个子数组的gcd是不同的. 就是[L, ...

  5. Codeforces数学1600----day1[同余定理,树状数组+两次二分,,组合计数]

    1.C. Kuroni and Impossible Calculation **知识点:同余定理 ** #include <iostream> #include <cstdio&g ...

  6. P6834-[Cnoi2020]梦原【数学期望,树状数组】

    正题 题目链接:https://www.luogu.com.cn/problem/P6834?contestId=34123 题目大意 nnn个点,每个点i(i≠1)i(i\neq 1)i(i​=1 ...

  7. 【HDU - 5869】Different GCD Subarray Query(思维,数学,gcd,离线处理,查询区间不同数,树状数组 或 二分RMQ)

    题干: This is a simple problem. The teacher gives Bob a list of problems about GCD (Greatest Common Di ...

  8. [CF808B] Average Sleep Time([强行]树状数组,数学)

    题目链接:http://codeforces.com/contest/808/problem/B 题意:n个数,求其中每k个数的和的平均值. 鬼知道我怎么会石乐志上来就用了树状数组. 1 #inclu ...

  9. 好骚气的树状数组的解释

    引用请注明出处:http://blog.csdn.net/int64ago/article/details/7429868 写下这个标题,其实心里还是没底的,与其说是写博帖,不如说是做总结.第一个接触 ...

  10. 树状数组 _ 求逆序数

    注: 本文只是记录  ,您将从上面学习不到任何知识,除了 代码 (废话)第一次接触到树状数组,感觉接触到了新世界,理解这个思想用了好长时间,终于弄明白了(似懂非懂). 还有接触到了  离散化的思想, ...

最新文章

  1. 【Visual C++】游戏开发笔记二十七 Direct3D 11入门级知识介绍
  2. 用Linux虚拟机手工编译安装Apache
  3. python解析树_如何使用python中的stanford解析器获取树的叶子?
  4. 08.认证考试注意事项
  5. 设计和实现一个 Chrome 插件提升登录效率
  6. php mysql 编码为utf-8_php连mysql用 utf-8编码乱码怎么办
  7. python os path isfile_Python path.isfile方法代码示例
  8. 将本地项目上传到gitLab操作
  9. kite:Python 代码自动补全神器
  10. 整理几个高质量Java自学网站
  11. Mysql官网下载教程
  12. 【夜神模拟器运行app】uniapp将app运行到夜神模拟器
  13. 分段衰减衰减系数_深度学习中的固定学习率衰减策略总结
  14. c语言程序经过编译以后生成的文件名的后缀为,c语言源文件经过编译后生成文件的后缀是什么...
  15. 程序员租房福利! 最新 2018年上海公积金提取 租房提取
  16. 2017年6月六级翻译明朝
  17. T4 如何去掉图片背景色变成透明
  18. Columns函数:返回数据表区域的总列数。
  19. 《 Programming Collective Intelligence》案例介绍与分析——Making Recommendations
  20. 计算机表格a列除b列,win10系统下EXCEL表格A列B列C列消失了怎么办

热门文章

  1. 将图片转换为Base64编码字符串、解析Base64编码字符串后生成图片
  2. 计算机考研百天,2021非全日制研究生备考即将进入百天倒计时的你还在坚持吗?...
  3. 手机点餐系统概述_餐馆点菜系统概要设计
  4. 3306端口被占用解决方式
  5. matlab将数据集分成训练集和测试集,Matlab实现 把数据集X分割成训练集和测试集...
  6. 5-0 51单片机流水灯
  7. PMP第十章:项目沟通管理
  8. 毕业设计 嵌入式太空游戏机设计与实现
  9. C语言函数嵌套学习实例
  10. 丹尼斯·里奇的自述简历