Codeforces 284C Cows and sequence 构造 or 线段树
来源:互联网 发布:花纹板理论价格算法 编辑:程序博客网 时间:2024/05/22 05:19
点击打开链接
题意:m个操作 m<=2e5 操作有三种类型:前ai个数同时增大x.添加一个数ki,移除最后一个数,问每次操作后的平均值?
前两个操作容易实现 只要记录sum和个数即可, 由于最后一个操作,还需要知道当前数列中最后一个数的值.
设add[i] 前i个数同时加的add[i] ,只有求最后一个元素才有需要用到add.前面没有需要的先不更新add
每次删除最后一个元素时 将它的add[i]传递给add[i-1] 则add[cur]就等于add[cur~ed] , a[cur]=a[cur]+add[cur]
#include <bits/stdc++.h>using namespace std;const int N=2e5+20;double sum[N],add[N],a[N];//add[i] 前i个数增加多少 int main(){int n,cur=1;double sum=0;cin>>n;while(n--){int op,p;double x;scanf("%d",&op);if(op==1){scanf("%d%lf",&p,&x);sum+=p*x;add[p]+=x;//先记录最后一个 有需要用到前面时,向前转移即可 }else if(op==2){scanf("%lf",&x);a[++cur]=x;sum+=x;}else{a[cur]=a[cur]+add[cur];//当前add[cur]包含以前加过的add[cur-1]+=add[cur];add[cur]=0;//sum-=a[cur];cur--; }printf("%.10lf\n",sum/cur);} return 0;}
线段树暴力
#include <bits/stdc++.h>using namespace std;const int N=2e5+20;//题意:m个操作 m<=2e5 操作有三种类型:前ai个数同时增大x.添加一个数ki,移除最后一个数,问每次操作后的平均值? double sum[N*4],lazy[N*4],add[N*4];struct node{int l,r;int mid(){return (l+r)>>1;}}seg[N<<2];void push_up(int rt){sum[rt]=sum[rt<<1]+sum[rt<<1|1];}void build(int l,int r,int rt){//cout<<l<<' '<<r<<' '<<rt<<endl;seg[rt].l=l;seg[rt].r=r;lazy[rt]=add[rt]=0;if(l==r){sum[rt]=0;//initreturn;}int m=seg[rt].mid();build(l,m,rt<<1);build(m+1,r,rt<<1|1);push_up(rt);}void push_down(int op,int rt,int l){if(lazy[rt]){lazy[rt<<1]=lazy[rt<<1|1]=lazy[rt];//传递lazy标记 sum[rt<<1]=lazy[rt]*(l-l/2); sum[rt<<1|1]=lazy[rt]*(l/2); lazy[rt]=0;//取消标记 }if(add[rt]){add[rt<<1]+=add[rt];add[rt<<1|1]+=add[rt];sum[rt<<1]+=add[rt]*(l-l/2); sum[rt<<1|1]+=add[rt]*(l/2);add[rt]=0;}}void update(int op,double c,int l,int r,int rt){if(seg[rt].l==l&&seg[rt].r==r){if(op==1){sum[rt]+=(r-l+1)*c;add[rt]+=c;}else{sum[rt]=c*(r-l+1);lazy[rt]=c;//先不更新子节点 }return; }if(seg[rt].l==seg[rt].r)return;//分解区间时,把以前每更新的先更新了push_down(op,rt,seg[rt].r-seg[rt].l+1);int m=seg[rt].mid(); if(r<=m)update(op,c,l,r,rt<<1);else if(l>m)update(op,c,l,r,rt<<1|1);else{update(op,c,l,m,rt<<1);update(op,c,m+1,r,rt<<1|1);}push_up(rt);}int main(){int n,sz=1;cin>>n;build(1,n+5,1);while(n--){int op,a;double x;scanf("%d",&op);if(op==1){scanf("%d%lf",&a,&x);update(op,x,1,a,1);}else if(op==2){sz++;double k;scanf("%lf",&k);update(op,k,sz,sz,1);}else{update(op,0,sz,sz,1);sz--;}double s=sum[1];printf("%.10lf\n",s/(1.0*sz));} return 0;}
0 0
- Codeforces 284C Cows and sequence 构造 or 线段树
- Codeforces 284C Cows and Sequence【思维】
- codeforces 283A. Cows and Sequence [线段树-区间更新]
- Codeforces 272C Dima and Staircase 思维 or 线段树
- Codeforces 283A Cows and Sequence
- Codeforces 894C:Marco and GCD Sequence(构造)
- Codeforces Round #174 (Div. 2)---C. Cows and Sequence(操作序列)
- codeforces 283A - Cows and Sequence 简单数据结构模拟
- Codeforces-Round 174(Cows and Sequence)(树状数组、高校算法)
- CodeForces 283A Cows and Sequence 树状数组
- hdu6025-构造or线段树
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence 构造
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence (构造 贪心)
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence(构造,思路)
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence(构造)
- Codeforces Round #447 (Div. 2) C. Marco and GCD Sequence 构造
- codeforces 864C Marco and GCD Sequence
- codeforces C. Marco and GCD Sequence
- php数组指针
- web前端 16
- protostuff-runtime服务端和安卓端编解码字段顺序不一致
- CSS的简单用法(上)
- web前端 17
- Codeforces 284C Cows and sequence 构造 or 线段树
- web前端 18
- 算法导论-字符串匹配
- Postgres 子查询 介绍
- leecode 解题总结:82. Remove Duplicates from Sorted List II
- web前端19
- web前端 20
- node+javascript+express
- AccessibilityService——实现微信切换账号功能