HDU 4288 Coder ( 离散化 + 离线 + 线段树 )
这题跟ZOJ 3606的解题思路很相似。
题意:有3中操作:1.向集合中增加一个数x(1≤x≤1
e9);2.从集合中删去一个数x(保证这个数存在);3.查询集合中所有位置满足i%5==3的数a[i]的和,集合中的数按升序排列。给你一共N个操作,输出每次查询的和。
做法:因为操作只有10^5个,所以将所有查询中的数保存下来,排序之后离散化。每个数对应一个“位置”,通过标记这个“位置”是否已用来表示该数是否在集合中。
线段树节点记录两个信息:
cnt:这一段“位置”中含有多少个数,pushUp的时候cnt[rt] = cnt[ rt << 1 ] + cnt[ rt << 1 | 1 ];
sum[5]:sum[i]表示这个区间中,从左到右编号,位置模5为i的所有数的和。
pushUp的时候,sum[rt][i] = sum[lc][i], sum[rt][ (i+cnt[lc])%5 ]+= sum[rc][i]
#include <cstdio>
#include <cstring>
#include <cstdlib>
#include <algorithm> #define LL long long int
#define lson l, m, rt << 1
#define rson m + 1, r, rt << 1 | 1
#define lc rt << 1
#define rc rt << 1 | 1 using namespace std; const int MAXN = ; struct Qry
{
int op;
int val;
} qq[MAXN]; struct node
{
LL sum[];
int cnt;
}; int Q;
int num[MAXN];
int cnt;
node Tr[ MAXN << ]; void build( int l, int r, int rt )
{
for ( int i = ; i < ; ++i ) Tr[rt].sum[i] = ;
Tr[rt].cnt = ; if ( l == r ) return;
int m = ( l + r ) >> ;
build( lson );
build( rson );
return;
} void PushUp( int rt )
{
Tr[rt].cnt = Tr[lc].cnt + Tr[rc].cnt;
for ( int i = ; i < ; ++i ) Tr[rt].sum[i] = Tr[lc].sum[i];
for ( int i = ; i < ; ++i ) Tr[rt].sum[ (i+Tr[lc].cnt)% ] += Tr[rc].sum[i];
return;
} void Update( int x, int op, int l, int r, int rt )
{
if ( l == x && x == r )
{
for ( int i = ; i < ; ++i ) Tr[rt].sum[i] = ;
if ( op == )
{
Tr[rt].cnt = ;
Tr[rt].sum[] = num[x];
}
else if ( op == ) Tr[rt].cnt = ;
return;
}
int m = ( l + r ) >> ;
if ( x <= m ) Update( x, op, lson );
else Update( x, op, rson );
PushUp( rt );
return;
} int main()
{
while ( scanf( "%d", &Q ) == )
{
cnt = ;
for ( int i = ; i < Q; ++i )
{
char tmp[];
scanf( "%s", tmp );
if ( tmp[] == 'a' )
{
qq[i].op = ;
scanf( "%d", &qq[i].val );
num[cnt++] = qq[i].val;
}
else if ( tmp[] == 'd' )
{
qq[i].op = ;
scanf( "%d", &qq[i].val );
num[cnt++] = qq[i].val;
}
else qq[i].op = ;
} sort( num + , num + cnt );
cnt = unique( num + , num + cnt ) - num;
build( , cnt - , ); for ( int i = ; i < Q; ++i )
{
if ( qq[i].op == )
printf( "%I64d\n", Tr[].sum[] );
else
{
int x = lower_bound( num + , num + cnt, qq[i].val ) - num;
Update( x, qq[i].op, , cnt - , );
}
}
}
return ;
}
HDU 4288 Coder ( 离散化 + 离线 + 线段树 )的更多相关文章
- HDU 5700 区间交 离线线段树
区间交 题目连接: http://acm.hdu.edu.cn/showproblem.php?pid=5700 Description 小A有一个含有n个非负整数的数列与m个区间.每个区间可以表示为 ...
- HDU 4031 Attack(离线+线段树)(The 36th ACM/ICPC Asia Regional Chengdu Site —— Online Contest)
题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=4031 Problem Description Today is the 10th Annual of ...
- hdu 4417 Super Mario 离线线段树
思路:将点按值从小到大排序,询问按h从小到大排序. 在建立线段树,按h的大小更新树并得到该次查询的结果! 代码如下: #include<iostream> #include<stdi ...
- HDU 3333 Turing Tree 离线 线段树/树状数组 区间求和单点修改
题意: 给一个数列,一些询问,问你$[l,r]$之间不同的数字之和 题解: 11年多校的题,现在属于"人尽皆知傻逼题" 核心思想在于: 对于一个询问$[x,R]$ 无论$x$是什么 ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 【HDU 1542】Atlantis(线段树+离散化,矩形面积并)
求矩形面积并,离散化加线段树. 扫描线法: 用平行x轴的直线扫,每次ans+=(下一个高度-当前高度)*当前覆盖的宽度. #include<algorithm> #include<c ...
- HDU 3016 Man Down (线段树+dp)
HDU 3016 Man Down (线段树+dp) Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 32768/32768 K (Ja ...
- bzoj2333 离线 + 线段树
https://www.lydsy.com/JudgeOnline/problem.php?id=2333 有N个节点,标号从1到N,这N个节点一开始相互不连通.第i个节点的初始权值为a[i],接下来 ...
- HDU.5692 Snacks ( DFS序 线段树维护最大值 )
HDU.5692 Snacks ( DFS序 线段树维护最大值 ) 题意分析 给出一颗树,节点标号为0-n,每个节点有一定权值,并且规定0号为根节点.有两种操作:操作一为询问,给出一个节点x,求从0号 ...
随机推荐
- securecrt颜色设置
https://blog.csdn.net/zq710727244/article/details/53909801
- easyui基于 layui.laydate日期扩展组件
本人后端开发码农一个,公司前端忙的一逼,项目使用的是easyui组件,其自带的datebox组件使用起来非常不爽,主要表现在 1.自定义显示格式很麻烦 2.选择年份和月份用户体验也不好 网上有关于和M ...
- Spring Boot Common application properties(转载)
转自官方文档:http://docs.spring.io/spring-boot/docs/current/reference/html/common-application-properties.h ...
- Anaconda下安装 TensorFlow 和 keras 以及连接pycharm
首先在官网下载Anaconda https://www.anaconda.com/download/ 安装时注意 勾选第一个,增加环境变量 安装好后再windows界面打开Anaconda Promp ...
- rsync+lsyncd实现实时同步
1.接收端安装rsync,修改/etc/rsyncd.conf配置文件,然后启动服务. uid = rootgid = rootuse chroot = nomax connection = 4sec ...
- Nginx+php+mysql+wordpress搭建自己的博客站点
服务器环境要求Centos 6 或以上版本(由于我们的目标是半小时内搭建好,那就选简单yum安装)MySQL 5或更新版本Nginx 1或更新版本PHP 5 或更新版本 php-fpm 5或更新版本 ...
- Linux系统崩溃,数据迁移
就在1小时前,处理了件如标题所述的麻烦事儿.吃完午饭,想对此作个总结,一来自己梳理下过程以便后面遇见类似的事可以 快速处理,二来同行的小伙伴们可以探讨下.故事是这样的,公司所在园区物业晚上断电8小时, ...
- IOS中input与fixed同时存在的情况会出现bug
两种解决方案,一种是将内容区域放在中间部分,只是中间部分在滚动(还是固定在底部):另一种是判断当是ios时,将其转换为absolute定位.(跟随着页面的滚动而滚动);; 当使用input时,fixe ...
- php 变量的8类类型
整形,布尔,浮点形,字符串,数组,资源,对象和null php数据类型之查看和判断数据类型 php数据类型之自动转换和强制转换
- Head First Java-图形化界面
Head First Java是本挺好的书,讲的比较清楚和简单.主要看原则.概念啥的.语法什么的,还是靠谷歌吧:) 这部分的笔记也有很多了,最近会努力更新和搬运.顺便自己也重新读一下. 就酱.想要这本 ...