[登录]
[注册]
首页
Web开发
Windows程序
编程语言
数据库
移动开发
系统相关
微信
其他好文
会员
首页
>
其他好文
> 详细
hdu 4288 Coder 线段树
时间:
2015-04-02 09:15:06
阅读:
118
评论:
0
收藏:
0
[点我收藏+]
标签:
//先将所有的操作离线,将读入的所有数按照从小到大排列,去除重复的点
//用线段树维护这个区间内的数读入的数目,用一个数组存入在这个区间内
//对5取余数分别为0,1,2,3,4的所有数之和
//更新的时候tree[v].sum[i] = tree[v<<1].sum[i] + tree[v<<1|1].sum[((i - tree[v<<1].cnt)%5 + 5)%5] ;
#include<iostream>
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std ;
const int maxn = 500010 ;
struct node
{
int l ,r ;
__int64 sum[5];
int cnt ;
}tree[4*maxn] ;
int len ;
int a[maxn] ;
int data[maxn] ;
char str[maxn][10] ;
int N ;
int flag = 0;
int bit(int num)
{
int left = 0;
int right = len - 1;
while(left <= right)
{
int mid = (left + right) >> 1 ;
if(a[mid] > num)
right = mid - 1 ;
else if(a[mid] < num)
left = mid + 1;
else
return mid ;
}
}
void build(int l ,int r ,int v)
{
tree[v].l = l;
tree[v].r = r;
tree[v].cnt = 0;
memset(tree[v].sum , 0 ,sizeof(tree[v].sum)) ;
if(l == r) return ;
int mid = (l+r)>>1;
build(l , mid , v<<1) ;
build(mid+1 , r , v<<1|1) ;
}
void update(int pos , int num ,int v)
{
tree[v].cnt += 2*flag - 1 ;
if(tree[v].l == tree[v].r)
{
tree[v].sum[0] = flag*num ;
return ;
}
if(pos <= tree[v<<1].r)
update(pos , num , v<<1) ;
else update(pos , num , v<<1|1) ;
for(int i = 0;i < 5 ; i++)
tree[v].sum[i] = tree[v<<1].sum[i] + tree[v<<1|1].sum[((i - tree[v<<1].cnt)%5 + 5)%5] ;
}
int main()
{
// freopen("in.txt","r",stdin) ;
while(scanf("%d" , &N) != EOF)
{
len = 0;
for(int i = 0;i < N ;i++)
{
scanf("%s", str[i]) ;
if(str[i][0] != ‘s‘)
{
scanf("%d" , &data[i]);
a[len++] = data[i] ;
}
}
sort(a , a+len) ;
len = unique(a,a+len) - a ;
if(!len) memset(tree[1].sum , 0 ,sizeof(tree[1].sum)) ;
else build(1, len , 1) ;
for(int i = 0;i < N ;i++)
{
if(str[i][0] == ‘a‘)
{
flag = 1 ;
int pos = bit(data[i]) ;
update(pos , data[i] , 1) ;
}
else if(str[i][0] == ‘d‘)
{
flag = 0;
int pos = bit(data[i]);
update(pos , data[i] , 1) ;
}
else
printf("%I64d\n" , tree[1].sum[2]) ;
}
}
}
hdu 4288 Coder 线段树
标签:
原文地址:http://blog.csdn.net/cq_pf/article/details/44814691
踩
(
0
)
赞
(
0
)
举报
评论
一句话评论(
0
)
登录后才能评论!
分享档案
更多>
2021年07月29日 (22)
2021年07月28日 (40)
2021年07月27日 (32)
2021年07月26日 (79)
2021年07月23日 (29)
2021年07月22日 (30)
2021年07月21日 (42)
2021年07月20日 (16)
2021年07月19日 (90)
2021年07月16日 (35)
周排行
更多
分布式事务
2021-07-29
OpenStack云平台命令行登录账户
2021-07-29
getLastRowNum()与getLastCellNum()/getPhysicalNumberOfRows()与getPhysicalNumberOfCells()
2021-07-29
【K8s概念】CSI 卷克隆
2021-07-29
vue3.0使用ant-design-vue进行按需加载原来这么简单
2021-07-29
stack栈
2021-07-29
抽奖动画 - 大转盘抽奖
2021-07-29
PPT写作技巧
2021-07-29
003-核心技术-IO模型-NIO-基于NIO群聊示例
2021-07-29
Bootstrap组件2
2021-07-29
友情链接
兰亭集智
国之画
百度统计
站长统计
阿里云
chrome插件
新版天听网
关于我们
-
联系我们
-
留言反馈
© 2014
mamicode.com
版权所有 联系我们:gaon5@hotmail.com
迷上了代码!