BZOJ4419:[SHOI2013]发微博(乱搞)
Description
Input
Output
Sample Input
! 1
! 2
+ 1 2
! 1
! 2
- 1 2
! 1
! 2
Sample Output
1 1
只有第4和第5条记录对应的消息被看到过。其他消息发送时,1和2不是好友。
对100%的数据,N<=200000,M<=500000
Solution
感觉现在做数据结构做傻了……一看到类似操作就往数据结构上艹
后来发现唯一能搞的lct好像还搞不了emmm……
然后又想着能不能离线搞,发现+x y -x y 只有他们之间的一段才会有贡献
每个点单独开一个set,计算和其相连的人
当为叹号的时候cnt++
那么我们就在加的时候把当前cnt减掉,然后在后面减的时候再加上新的cnt,
这一段区间内的贡献就都被考虑进去了
最后再遍历一遍set把过程中没有减掉的贡献算上就行了
Code
#include<iostream>
#include<cstdio>
#include<set>
#define N (200005)
using namespace std;
set<int>s[N];
set<int>::iterator po;
int n,m,x,y,cnt[N],ans[N];
char opt[];
int main()
{
scanf("%d%d",&n,&m);
for (int i=; i<=m; ++i)
{
scanf("%s",opt);
switch (opt[])
{
case '!':
{
scanf("%d",&x);
cnt[x]++;
break;
}
case '+':
{
scanf("%d%d",&x,&y);
s[y].insert(x);
s[x].insert(y);
ans[x]-=cnt[y];
ans[y]-=cnt[x];
break;
}
case '-':
{
scanf("%d%d",&x,&y);
s[y].erase(s[y].find(x));
s[x].erase(s[x].find(y));
ans[x]+=cnt[y];
ans[y]+=cnt[x];
break;
}
}
}
for (int i=; i<=n; i++)
for (po=s[i].begin(); po!=s[i].end(); ++po)
ans[*po]+=cnt[i];
for (int i=; i<=n-; ++i)
printf("%d ",ans[i]);
printf("%d",ans[n]);
}
BZOJ4419:[SHOI2013]发微博(乱搞)的更多相关文章
- bzoj4419[SHOI2013]发微博
题意:给你一个初始没有边,点权均为0的无向图,三种操作:加边,删边,选择一个点将当前与之相邻的点(不包括自身)的点权+1,询问最后所有点的点权. 据说正解是set维护每个人的朋友,然后考虑每次加边.删 ...
- BZOJ4419: [Shoi2013]发微博 暴力
Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用 ...
- BZOJ4419 SHOI2013发微博(平衡树)
好友状态的变化次数不会超过m,于是考虑暴力,对每个人记录其好友关系的变化,通过前缀和计算贡献.这需要查询一段前缀时间内某人发的微博数量,可以离线建一棵绝对平衡的平衡树.事实上完全可以线性. #incl ...
- 【BZOJ4419】[SHOI2013]发微博(???)
[BZOJ4419][SHOI2013]发微博(???) 题面 BZOJ 洛谷 题解 一道\(easy\),每个点维护一下要给周围的点加上多上,如果额外连了一个点进来就给他把标记减掉,如果删掉了一条边 ...
- 洛谷 P3998 [SHOI2013]发微博
洛谷 P3998 [SHOI2013]发微博 洛谷传送门 题目描述 刚开通的 SH 微博共有n个用户(1Ln标号),在这短短一个月的时间内, 用户们活动频繁,共有m 条按时间顺序的记录: ! x 表示 ...
- [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]发微博 方法记录
原题链接 [SHOI2013]发微博 题目描述 刚开通的 SH 微博共有 \(n\) 个用户(\(1\sim n\) 标号),在这短短一个月的时间内,用户们活动频繁,共有 \(m\) 条按时间顺序的记 ...
- 【bzoj4419】[Shoi2013]发微博 STL-set
题目描述 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x 表示用户x发了一条微博: + x y 表示用户x和用户y成为了好友 ...
随机推荐
- Go的接口总结
一.什么是接口 接口类型是一种抽象的类型,它描述了一系列方法的集合. 接口约定:接口类型中定义的方法即为约定,若一个具体类型实现了所有这些方法,则该类型就满足该接口的约定,或者说它是这个接口类型的实例 ...
- B/S结构中页面间的传值
常见的页面间的传值有session,cookie,application,server.transfer(),queryString,今天主要记录一下server.transfer()的用法. 从A页 ...
- PHP学习2——基本语法
主要内容: 二进制 数据类型 变量 常量 赋值 语句结构 函数 网站的核心功能是展现信息,文字,图片,视频,音频,对于计算机来说都是数据,这些数据按照二进制进行存储. 二进制 就是1100,0100, ...
- 转发与重定向的区别(forward与redirect的区别)
转发:服务器接收到客户端的请求后,在服务器内部传递的过程.最后回复结果给客户端. 重定向:服务器接收到客户端的请求后,回复一个新url给客户端,客户端跳转新url.
- go get 下载需要的相关工具
文档来源: https://code.google.com/p/go-wiki/wiki/GoGetTools 被墙了,所以转在这个备用. Installing Version Control Too ...
- LinearLayout中的android:layout_garvity的center_vertical和center_horizontal
当LinearLayout的排列方向是 horizontal时,只有垂直方向上的对齐方式才会生效.因为此时水平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定该方向上的对 ...
- 工作中常用的sql语句以及知识整理
一.常用的sql语句 1.建表语句 create table tabname(colname1 type1 [not null][primary key], colname2 type2,...) 根 ...
- 【Android】13.0 UI开发(四)——列表控件RecyclerView的横向布局排列实现
1.0 新建项目,由于ListView的局限性,RecyclerView是一种很好取代ListView的控件,可以灵活实现多种布局. 2.0 新建项目RecyclerviewTest,目录如下: 3. ...
- 移动端meta标签的使用和设置
<meta name="viewport" content="width=device-width,initial-scale=1.0,maximum-scale= ...
- HTML 简单日历制作方法
新手一枚,不会写什么高大上的博文,一些平时做的小练习,献丑 <!doctype html> <html> <head> <meta charset=" ...