BZOJ4419 SHOI2013发微博(平衡树)
好友状态的变化次数不会超过m,于是考虑暴力,对每个人记录其好友关系的变化,通过前缀和计算贡献。这需要查询一段前缀时间内某人发的微博数量,可以离线建一棵绝对平衡的平衡树。事实上完全可以线性。
#include<iostream>
#include<cstdio>
#include<cmath>
#include<cstdlib>
#include<cstring>
#include<algorithm>
#include<vector>
using namespace std;
int read()
{
int x=,f=;char c=getchar();
while (c<''||c>'') {if (c=='-') f=-;c=getchar();}
while (c>=''&&c<='') x=(x<<)+(x<<)+(c^),c=getchar();
return x*f;
}
#define N 200010
#define M 500010
int n,m,ans[N],root[N],cnt=,flag[N];
vector<int> t[N],h[N],op[N],a[N];
struct data{int ch[],x,s;
}tree[M];
void build(int i,int &k,int l,int r)
{
if (l>r) return;
int mid=l+r>>;
k=++cnt;tree[k].x=a[i][mid];
if (l==r) {tree[k].s=;return;}
build(i,tree[k].ch[],l,mid-);
build(i,tree[k].ch[],mid+,r);
tree[k].s=tree[tree[k].ch[]].s+tree[tree[k].ch[]].s+;
}
int query(int k,int x)
{
if (k==) return ;
if (x<tree[k].x) return query(tree[k].ch[],x);
else return tree[tree[k].ch[]].s++query(tree[k].ch[],x);
}
int main()
{
#ifndef ONLINE_JUDGE
freopen("bzoj4419.in","r",stdin);
freopen("bzoj4419.out","w",stdout);
const char LL[]="%I64d\n";
#else
const char LL[]="%lld\n";
#endif
srand();
n=read(),m=read();
for (int i=;i<=m;i++)
{
char c=getchar();
while (c!='!'&&c!='+'&&c!='-') c=getchar();
if (c=='!') a[read()].push_back(i);
else
{
int x=read(),y=read();
t[x].push_back(i),h[x].push_back(y),op[x].push_back(c=='+'?-:);
t[y].push_back(i),h[y].push_back(x),op[y].push_back(c=='+'?-:);
}
}
for (int i=;i<=n;i++)
if (a[i].size())
{
sort(a[i].begin(),a[i].end());
build(i,root[i],,a[i].size()-);
}
for (int i=;i<=n;i++)
{
for (int j=;j<t[i].size();j++)
ans[i]+=query(root[h[i][j]],t[i][j])*op[i][j],flag[h[i][j]]+=op[i][j];
for (int j=;j<t[i].size();j++)
if (flag[h[i][j]]) flag[h[i][j]]=,ans[i]+=tree[root[h[i][j]]].s;
}
for (int i=;i<=n;i++) printf("%d ",ans[i]);
return ;
}
BZOJ4419 SHOI2013发微博(平衡树)的更多相关文章
- bzoj4419[SHOI2013]发微博
题意:给你一个初始没有边,点权均为0的无向图,三种操作:加边,删边,选择一个点将当前与之相邻的点(不包括自身)的点权+1,询问最后所有点的点权. 据说正解是set维护每个人的朋友,然后考虑每次加边.删 ...
- BZOJ4419: [Shoi2013]发微博 暴力
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用 ...
- BZOJ4419:[SHOI2013]发微博(乱搞)
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用 ...
- 【BZOJ4419】[SHOI2013]发微博(???)
[BZOJ4419][SHOI2013]发微博(???) 题面 BZOJ 洛谷 题解 一道\(easy\),每个点维护一下要给周围的点加上多上,如果额外连了一个点进来就给他把标记减掉,如果删掉了一条边 ...
- [BZOJ 4419][Shoi2013]发微博
4419: [Shoi2013]发微博 Time Limit: 10 Sec Memory Limit: 256 MBSubmit: 665 Solved: 364[Submit][Status] ...
- BZOJ 4419: [Shoi2013]发微博 set模拟
4419: [Shoi2013]发微博 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4419 Description 刚开通的SH微博共 ...
- 洛谷 P3998 [SHOI2013]发微博
洛谷 P3998 [SHOI2013]发微博 洛谷传送门 题目描述 刚开通的 SH 微博共有n个用户(1Ln标号),在这短短一个月的时间内, 用户们活动频繁,共有m 条按时间顺序的记录: ! x 表示 ...
- P3998 [SHOI2013]发微博 方法记录
原题链接 [SHOI2013]发微博 题目描述 刚开通的 SH 微博共有 \(n\) 个用户(\(1\sim n\) 标号),在这短短一个月的时间内,用户们活动频繁,共有 \(m\) 条按时间顺序的记 ...
- 【bzoj4419】[Shoi2013]发微博 STL-set
题目描述 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用户y成为了好友 ...
随机推荐
- Ubuntu 16.04 Server 版安装过程图文详解
进入系统安装的第一个界面,开始系统的安装操作.每一步的操作,左下角都会提示操作方式!! 1.选择系统语言-English 2.选择操作-Install Ubuntu Server 3.选择安装过程和系 ...
- Oracle数据库远程访问
如果需要访问非本机的Oracle数据库,首先需要安装一个Oracle的客户端,我直接安装的服务器版本的Oracle,也自带客户端. 安装完成后,如果访问本机的服务器的话,直接就可以访问,无需配置, 如 ...
- svg在html的使用
<svg xmlns='http://www.w3.org/2000/svg' xmlns:xlink='http://www.w3.org/1999/xlink'> <defs&g ...
- linux上面安装LAMP环境
一.安装php 1.1.yum安装php yum -y install php 1.2..安装PHP扩展 yum -y install php-mysql php-gd php-imap php-ld ...
- ruby 数据类型Number
Ruby支持的数据类型包括基本的Number.String.Ranges.Symbols,以及true.false和nil这几个特殊值,同时还有两种重要的数据结构——Array和Hash 数值类型(N ...
- 解决 Python2 和 Python3 的共存问题
首先安装两种版本的Python 进入系统属性更改环境变量 将两个版本的安装路径找出. 添加至PATH中,变量之间用分号隔开. D:\Python36\Scripts\;D:\Python36\;D:\ ...
- 【Leetcode】709. To Lower Case
To Lower Case Description Implement function ToLowerCase() that has a string parameter str, and retu ...
- ORACLE中order by造成分页不正确原因分析
工作中遇到的问题: 为调用方提供一个分页接口时,调用方一直反应有部分数据取不到,且取到的数据有重复的内容,于是我按以下步骤排查了下错误. 1.检查分页页码生成规则是否正确. 2.检查SQL语句是否正 ...
- C++11中Lambda的使用
Lambda functions: Constructs a closure, an unnamed function object capable of capturing variables in ...
- 事务消息中心-TMC
此文已由作者杨凯明授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 背景 为什么要做事务消息中心 原有kqueue的方式缺点: 降低业务库性能 占用业务库磁盘 历史数据管理成本 ...