HDU 4288线段树开动脑筋
来源:互联网 发布:扇贝软件下载 编辑:程序博客网 时间:2024/05/18 01:17
点击打开链接
题意:有几种操作,add加入一个数,del删除一个数,问所有下标%5==3的数的和
思路:看题就知道是线段树,又有加入又有删除又有求和的,线段树无疑,可是问的是下标%5==3的数的和,我们可以令开一个数组cnt,记录区间数字的个数,这样我们开一个num数组,二维的,后面的[5]分别记录区间的下标%5==0,1,2,3,4的数的和,在更新的时候,如果要求num[][3]的值,则左儿子的[3]加上右儿子那部分,右儿子怎么算呢,因为左儿子的数字个数已经知道了cnt嘛,这样我们可以通过它求右儿子的,但不一定是[3]的了,如果cnt==4,则右儿子应该为[4]的值,画一画一目了然,对了,这题数太大,所以要离散化,比较简单
#include <math.h>#include <stdio.h>#include <string.h>#include <stdlib.h>#include <iostream>#include <algorithm>using namespace std;typedef long long ll;const int inf=0x3f3f3f3f;const int maxn=100010;ll num[maxn*4][5];int a[maxn],n,m,cnt[maxn*4];struct edge{ char c; int x;}q[maxn];void pushup(int node){ cnt[node]=cnt[node<<1]+cnt[node<<1|1]; for(int i=0;i<5;i++){ num[node][i]=num[node<<1][i]+num[node<<1|1][(i-cnt[node<<1]%5+5)%5]; }}void add(int pos,int val,int le,int ri,int node){ if(le==ri){ cnt[node]=1; num[node][1]=val; return ; } int t=(le+ri)>>1; if(pos<=t) add(pos,val,le,t,node<<1); else add(pos,val,t+1,ri,node<<1|1); pushup(node);}void del(int pos,int le,int ri,int node){ if(le==ri){ num[node][1]=cnt[node]=0; return ; } int t=(le+ri)>>1; if(pos<=t) del(pos,le,t,node<<1); else del(pos,t+1,ri,node<<1|1); pushup(node);}int main(){ char str[10]; while(scanf("%d",&n)!=-1){ m=0; for(int i=0;i<n;i++){ scanf(" %s",str); q[i].c=str[0]; if(str[0]!='s'){ scanf("%d",&q[i].x); a[m++]=q[i].x; } } sort(a,a+m); m=unique(a,a+m)-a; memset(cnt,0,sizeof(cnt)); memset(num,0,sizeof(num)); int pos; for(int i=0;i<n;i++){ if(q[i].c=='s') printf("%I64d\n",num[1][3]); else{ pos=lower_bound(a,a+m,q[i].x)-a+1; if(q[i].c=='a') add(pos,q[i].x,1,m,1); else del(pos,1,m,1); } } } return 0;}
0 0
- HDU 4288线段树开动脑筋
- 线段树 开动
- 开动脑筋,察言观色
- 开动脑筋的面试题
- HDU 4288线段树
- hdu 4288 线段树
- HDU 4288 线段树
- PMP项目管理中级工程师主观题自出题-一起开动脑筋解决问题
- hdu 4288(线段树) Coder
- hdu 4288 Coder (线段树)
- HDU 4288 Coder 线段树
- HDU-4288 Coder 线段树
- hdu-4288-Coder-线段树
- HDU 4288 Coder 线段树
- hdu 4288 分组线段树
- hdu 4288 Coder(线段树)
- HDU-4288-Coder(线段树)
- Coder- HDU 4288 线段树
- Json 笔记
- 星型模式 vs 雪花模型
- lucene的中文分词器
- MFC+opencv显示图片
- CoordinatorLayout里Behavior简单分析
- HDU 4288线段树开动脑筋
- C语言打印16进制出现0xffffff现象的问题剖析!
- python之目录操作
- 架构师面试题参考
- React和Redux的连接react-redux
- Java Web项目中使用Freemarker模版生成Word文档
- 常用js代码片段
- 系统吞吐量(TPS)、用户并发量、性能测试概念和公式
- cocos2D-X源码分析之从cocos2D-X学习OpenGL(1)----cocos2D-X渲染结构