hdu 4288 Coder
线段树好题,和 15 年的广东省省赛 C 题有相似之处,一开始我的思路有偏差,看了别人的博客后感觉处处技巧都是精华,主要是区间合并的技巧一时很难想到,先附上代码:
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
#define root int rt, int l, int r
#define lson rt << 1, l, mid
#define rson rt << 1 | 1, mid + 1, r
#define makemid int mid = l + r >> 1
typedef long long LL;
const int N = ; int cnt[N << ];
LL sum[N << ][]; void build(root) {
cnt[rt] = ;
for(int i = ; i < ; ++i)
sum[rt][i] = ;
if(l == r) return ;
makemid;
build(lson);
build(rson);
} inline int mymod(int x, int mod) {
if(x < ) return (x % mod + mod) % mod;
return x % mod;
} inline void pushup(int rt) {
for(int i = ; i < ; ++i)
sum[rt][i] = sum[rt << ][i] + sum[rt << | ][mymod(i - cnt[rt << ], )];
} bool flag;
int pos, val; void update(root) {
flag ? ++cnt[rt] : --cnt[rt];
if(l == r) {
sum[rt][] = flag ? val: ;
return ;
}
makemid;
if(pos <= mid) update(lson);
else update(rson);
pushup(rt);
} int find(int *c, int low, int up, int x) {
int mid;
while(low <= up) {
mid = low + up >> ;
if(x == c[mid]) return mid;
else if(x < c[mid]) up = mid - ;
else low = mid + ;
}
return low;
} char op[N][];
int c[N], digit[N]; int main() {
int n,k;
while(~scanf("%d",&n)) {
k = ;
for(int i = ; i < n; ++i) {
scanf("%s",op[i]);
if(op[i][] != 's') {
scanf("%d", c + i);
digit[k++] = c[i];
}
}
sort(digit, digit + k);
int len = unique(digit, digit + k) - digit; if(len) build(,,len); for(int i = ; i < n; ++i) {
if(op[i][] == 's') printf("%I64d\n",sum[][]);
else {
flag = op[i][] == 'a';
pos = find(digit, , len - , c[i]) + ;
val = c[i];
update(,,len);
}
}
}
return ;
}
做 100 道水题,不如做一道难题来得更有意义。
hdu 4288 Coder的更多相关文章
- HDU 4288 Coder (线段树)
Coder 题目:http://acm.hdu.edu.cn/showproblem.php?pid=4288 题意:有三种类型的操作,(1)."add x",表示往集合里加入�数 ...
- HDU 4288 Coder 【线段树+离线处理+离散化】
题意略. 离线处理,离散化.然后就是简单的线段树了.需要根据mod 5的值来维护.具体看代码了. /* 线段树+离散化+离线处理 */ #include <cstdio> #include ...
- HDU 4288 Coder(线段树)
题意: 给定三种操作 1. add x 向序列中添加x,添加之后序列还保持有序 2. del x 删除序列中值为x的元素 3. sum 求下边模5等于3的元素和 思路: 直接暴力也可以过,就是看暴 ...
- HDU 4288 Coder ( 离散化 + 离线 + 线段树 )
这题跟ZOJ 3606的解题思路很相似. 题意:有3中操作:1.向集合中增加一个数x(1≤x≤1e9):2.从集合中删去一个数x(保证这个数存在):3.查询集合中所有位置满足i%5==3的数a[i]的 ...
- hdu 4288 Coder(单点操作,查询)
题意: 三种操作: 1. add x – add the element x to the set;2. del x – remove the element x from the set;3. su ...
- hdu 4288 Coder (线段树+离线)
题意: 刚开始有一个空集合.有三种操作: 1.往集合中加入一个集合中不存在的数 x 2.从集合中删除一个已经存在的数 x 3.计算集合的digest sum并输出. digest sum求 ...
- hdu 4288 离线线段树+间隔求和
Coder Time Limit: 20000/10000 MS (Java/Others) Memory Limit: 32768/32768 K (Java/Others) Total Su ...
- 线段树(单点更新) HDOJ 4288 Coder
题目传送门 #include <cstdio> #include <cstring> #define lson l, m, rt << 1 #define rson ...
- hdu 4288 线段树+离线+离散化
http://acm.hdu.edu.cn/showproblem.php?pid=4288 開始的时候,果断TLE,做的方法是,线段树上只维护%5==3的坐标,比方1 2 3 4 5 6 7 假设 ...
随机推荐
- xheditor上传图片配置
二. 源码: <%@ Page Language="C#" AutoEventWireup="true" CodeFile="Xeditor.a ...
- SDUT 2603:Rescue The Princess
Rescue The Princess Time Limit: 1000ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Several days ago, a b ...
- c# Beginlnvoke 委托
using System; using System.Collections.Generic; using System.ComponentModel; using System.Data; usin ...
- MessageFlood 分类: 串 2015-06-18 17:00 10人阅读 评论(0) 收藏
MessageFlood TimeLimit: 1500ms Memory limit: 65536K 有疑问?点这里^_^ 题目描述 Well,how do you feel about mobil ...
- Flip Game 分类: POJ 2015-06-15 14:59 22人阅读 评论(0) 收藏
Flip Game Time Limit: 1000MS Memory Limit: 65536K Total Submissions: 33519 Accepted: 14642 Descr ...
- flash压力测试
涉及目录: vendor/mediatek/proprietary/bootable/bootloader/preloader/platform/mt6735/src/drivers/inc/dram ...
- nn package
1.nn模块是神经网络模块 2.父类module,子类Sequential, Parallel和Concat 3.Linear:做线性变换 4.criterion 这个模块包含了各式各样的训练时的损失 ...
- torch基本命令
命令行输入th进入torch框架 命令行输入th + lua文件表示用torch执行lua文件
- apahce
基本的操作方法:本文假设你的apahce安装目录为/usr/local/apache2,这些方法适合任何情况 apahce启动命令:推荐/usr/local/apache2/bin/apachectl ...
- ByteBuffer解析
一.前言 前一篇文章我们介绍了Android中直播视频技术的基础大纲知识,这里就开始一一讲解各个知识点,首先主要来看一下视频直播中的一个重要的基础核心类:ByteBuffer,这个类看上去都知道了,是 ...