AC日记——[SDOI2017]相关分析 洛谷 P3707
思路:
裸线段树;
(玄学ac);
代码:
- #include <bits/stdc++.h>
- using namespace std;
- #define maxn 100005
- struct TreeNodeType {
- int l,r,mid;
- double flagx2,flagy2,flagx3,flagy3,size;
- double sumx,sumy,suml,sumxy,sumx2,sumy2,suml2;
- bool if_3;
- inline void updata2(double posx,double posy)
- {
- sumx2+=size*posx*posx+*posx*sumx;
- sumy2+=size*posy*posy+*posy*sumy;
- sumxy+=size*posx*posy+sumx*posy+sumy*posx;
- sumx+=size*posx,sumy+=size*posy;
- flagx2+=posx,flagy2+=posy;
- }
- inline void updata3(double posx,double posy)
- {
- sumxy=size*posx*posy+suml*(posx+posy)+suml2;
- sumx2=size*posx*posx+posx**suml+suml2;
- sumy2=size*posy*posy+posy**suml+suml2;
- sumx=size*posx+suml,sumy=size*posy+suml;
- if_3=true,flagx3=posx,flagy3=posy;
- flagx2=,flagy2=;
- }
- };
- struct TreeNodeType tree[maxn<<];
- int n,m;
- double Sumx,Sumy,Sumx2,Sumy2,Sumxy,ai[maxn],bi[maxn];
- inline void updata(int now)
- {
- tree[now].sumx=tree[now<<].sumx+tree[now<<|].sumx;
- tree[now].sumy=tree[now<<].sumy+tree[now<<|].sumy;
- tree[now].suml=tree[now<<].suml+tree[now<<|].suml;
- tree[now].sumxy=tree[now<<].sumxy+tree[now<<|].sumxy;
- tree[now].sumx2=tree[now<<].sumx2+tree[now<<|].sumx2;
- tree[now].sumy2=tree[now<<].sumy2+tree[now<<|].sumy2;
- tree[now].suml2=tree[now<<].suml2+tree[now<<|].suml2;
- }
- void build(int now,int l,int r)
- {
- tree[now].l=l,tree[now].r=r,tree[now].size=r-l+;
- if(l==r)
- {
- tree[now].sumx=ai[l],tree[now].sumy=bi[l],tree[now].suml=l;
- tree[now].sumxy=ai[l]*bi[l],tree[now].suml2=(double)l*l;
- tree[now].sumx2=ai[l]*ai[l],tree[now].sumy2=bi[l]*bi[l];
- return;
- }
- tree[now].mid=l+r>>;
- build(now<<,l,tree[now].mid);
- build(now<<|,tree[now].mid+,r);
- updata(now);
- }
- inline void pushdown(int now)
- {
- if(tree[now].if_3)
- {
- tree[now].if_3=false;
- tree[now<<].updata3(tree[now].flagx3,tree[now].flagy3);
- tree[now<<|].updata3(tree[now].flagx3,tree[now].flagy3);
- }
- if(tree[now].flagx2||tree[now].flagy2)
- {
- tree[now<<].updata2(tree[now].flagx2,tree[now].flagy2);
- tree[now<<|].updata2(tree[now].flagx2,tree[now].flagy2);
- tree[now].flagx2=,tree[now].flagy2=;
- }
- }
- void operation1(int now,int l,int r)
- {
- if(tree[now].l>=l&&tree[now].r<=r)
- {
- Sumx+=tree[now].sumx,Sumy+=tree[now].sumy;
- Sumx2+=tree[now].sumx2,Sumy2+=tree[now].sumy2;
- Sumxy+=tree[now].sumxy;return;
- }
- if(tree[now].if_3||tree[now].flagx2||tree[now].flagy2) pushdown(now);
- if(l<=tree[now].mid) operation1(now<<,l,r);
- if(r>tree[now].mid) operation1(now<<|,l,r);
- }
- void operation2(int now,int l,int r,double s,double t)
- {
- if(tree[now].l>=l&&tree[now].r<=r)
- {
- tree[now].updata2(s,t);
- return;
- }
- if(tree[now].if_3||tree[now].flagx2||tree[now].flagy2) pushdown(now);
- if(l<=tree[now].mid) operation2(now<<,l,r,s,t);
- if(r>tree[now].mid) operation2(now<<|,l,r,s,t);
- updata(now);
- }
- void operation3(int now,int l,int r,double s,double t)
- {
- if(tree[now].l>=l&&tree[now].r<=r)
- {
- tree[now].updata3(s,t);
- return;
- }
- if(tree[now].if_3||tree[now].flagx2||tree[now].flagy2) pushdown(now);
- if(l<=tree[now].mid) operation3(now<<,l,r,s,t);
- if(r>tree[now].mid) operation3(now<<|,l,r,s,t);
- updata(now);
- }
- int main()
- {
- scanf("%d%d",&n,&m);
- for(int i=;i<=n;i++) scanf("%lf",&ai[i]);
- for(int i=;i<=n;i++) scanf("%lf",&bi[i]);
- build(,,n);
- int op,l,r;double s,t;
- while(m--)
- {
- scanf("%d%d%d",&op,&l,&r);
- if(op==)
- {
- Sumx=,Sumy=,Sumxy=,Sumx2=,Sumy2=;
- operation1(,l,r);
- double size=r-l+,x_=Sumx/size,y_=Sumy/size;
- double a=Sumxy-Sumy*x_-Sumx*y_+y_*x_*size;
- double b=Sumx2-*Sumx*x_+x_*x_*size;
- printf("%.10lf\n",a/b);
- }
- if(op==) scanf("%lf%lf",&s,&t),operation2(,l,r,s,t);
- if(op==) scanf("%lf%lf",&s,&t),operation3(,l,r,s,t);
- }
- return ;
- }
AC日记——[SDOI2017]相关分析 洛谷 P3707的更多相关文章
- AC日记——寻找道路 洛谷 P2296
题目描述 在有向图G 中,每条边的长度均为1 ,现给定起点和终点,请你在图中找一条从起点到终点的路径,该路径满足以下条件: 1 .路径上的所有点的出边所指向的点都直接或间接与终点连通. 2 .在满足条 ...
- AC日记——铺地毯 洛谷 P1003(水水水水水~)
题目描述 为了准备一个独特的颁奖典礼,组织者在会场的一片矩形区域(可看做是平面直角坐标系的第一象限)铺上一些矩形地毯.一共有 n 张地毯,编号从 1 到n .现在将这些地毯按照编号从小到大的顺序平行于 ...
- AC日记——过河卒 洛谷 1002
题目描述 棋盘上A点有一个过河卒,需要走到目标B点.卒行走的规则:可以向下.或者向右.同时在棋盘上C点有一个对方的马,该马所在的点和所有跳跃一步可达的点称为对方马的控制点.因此称之为“马拦过河卒”. ...
- AC日记——丢瓶盖 洛谷 P1316
题目描述 陶陶是个贪玩的孩子,他在地上丢了A个瓶盖,为了简化问题,我们可以当作这A个瓶盖丢在一条直线上,现在他想从这些瓶盖里找出B个,使得距离最近的2个距离最大,他想知道,最大可以到多少呢? 输入输出 ...
- AC日记——滑动窗口 洛谷 P1886
题目描述 现在有一堆数字共N个数字(N<=10^6),以及一个大小为k的窗口.现在这个从左边开始向右滑动,每次滑动一个单位,求出每次滑动后窗口中的最大值和最小值. 例如: The array i ...
- AC日记——挤牛奶 洛谷 P1204
题目描述 三个农民每天清晨5点起床,然后去牛棚给3头牛挤奶.第一个农民在300秒(从5点开始计时)给他的牛挤奶,一直到1000秒.第二个农民在700秒开始,在 1200秒结束.第三个农民在1500秒开 ...
- AC日记——导弹拦截 洛谷 P1020 (dp+模拟)
题目描述 某国为了防御敌国的导弹袭击,发展出一种导弹拦截系统.但是这种导弹拦截系统有一个缺陷:虽然它的第一发炮弹能够到达任意的高度,但是以后每一发炮弹都不能高于前一发的高度.某天,雷达捕捉到敌国的导弹 ...
- AC日记——信息传递 洛谷 P2661 (tarjan求环)
题目描述 有n个同学(编号为1到n)正在玩一个信息传递的游戏.在游戏里每人都有一个固定的信息传递对象,其中,编号为i的同学的信息传递对象是编号为Ti同学. 游戏开始时,每人都只知道自己的生日.之后每一 ...
- AC日记——积木大赛 洛谷 P1969
题目描述 春春幼儿园举办了一年一度的“积木大赛”.今年比赛的内容是搭建一座宽度为n的大厦,大厦可以看成由n块宽度为1的积木组成,第i块积木的最终高度需要是hi. 在搭建开始之前,没有任何积木(可以看成 ...
随机推荐
- Transformation 线段树好题 好题 (独立写出来对线段树不容易)
Transformation Time Limit: 15000/8000 MS (Java/Others) Memory Limit: 65535/65536 K (Java/Others)T ...
- 学习tcpIp必备的抓包工具wireshark
wireshark是一个优秀的抓包工具 ip.src=192.168.10.123 发送http的一端 ip.dst=192.168.10.126 接收http的一端 如下图所示:
- C#学习之泛型继承和静态成员
想要理解这里有必要先将泛型类学习充分.这里讲解的是泛型类继承类的类型和静态成员. 在前面C#学习之泛型中,创建的LinkList<T>类实现了IEnumerable<T>接口. ...
- Java IO------------------BIO(同步阻塞)、NIO1.0(多路复用)、NIO2.0(AIO,非阻塞)
1. BIO JDK5之前, JDK的IO模式只有BIO(同步阻塞)问题: 因为阻塞的存在, 需对每个请求开启一个线程. 过多的线程切换影响操作系统性能解决: 使用线程池, 处理不过来的放入队列, 再 ...
- WPF DataGrid、ListView 简单绑定
DataGrid运行效果: xaml 代码: DataGridName= dtgData ItemsSource= {Binding} AutoGenerateColumns= False DataG ...
- angularJs $resource自定义方法(待完善)
配置CompanyService var services = angular.module('liaoyuan.services'); services.factory('CompanyServic ...
- bzoj 2730: [HNOI2012]矿场搭建——tarjan求点双
Description 煤矿工地可以看成是由隧道连接挖煤点组成的无向图.为安全起见,希望在工地发生事故时所有挖煤点的工人都能有一条出路逃到救援出口处.于是矿主决定在某些挖煤点设立救援出口,使得无论哪一 ...
- WP8.1 Windows Phone 8.1开发:何如定义Pivot头部样式、定义Pivot头部颜色
Windows Phone 8.1 ,如何自定义Pivot头部样式?用Pivot控件完成这样的效果. 网上找了好久,只找到了windows phone 8的解决方案. 终于一个大神给支了招,我觉得我有 ...
- 头像截取 图片上传 js插件
先看一下整体效果 页面html <div class="row"> <div class="tabs-container"> <u ...
- 极致的 Hybrid:航旅离线包再加速!(转)
资源离线的思路简单.场景复杂,最复杂的就是 H5 活动页面的离线化.Mobile Web 在弱网提速的唯一的办法就是坚决杜绝不必要的(运行时)网络请求,即除了 Json 格式的动态数据和其携带的商品配 ...