bzoj4419[SHOI2013]发微博
题意:给你一个初始没有边,点权均为0的无向图,三种操作:加边,删边,选择一个点将当前与之相邻的点(不包括自身)的点权+1,询问最后所有点的点权。
据说正解是set维护每个人的朋友,然后考虑每次加边、删边对答案的贡献......但作为脑子有坑的选手,我搞出了一个动态开点线段树....首先离线,分别考虑每条边对答案的贡献。不妨分别考虑这条边存在的每一个时间区间。那么我们只要知道这个时间区间中两个端点各进行了几次点权增加(发微博)操作就可以更新两边的答案。考虑对每一个点开一棵线段树,如果这个点在第i个操作中发了一条微博就把下标为i处+1,查询的时候线段树区间查询即可。直接建的空间复杂度n*mlogm会TLE+MLE,所以动态开点,每次修改操作建一条链,总的空间复杂度mlogm。用map存了一下边所以很慢明明是线段树常数炸天
注意m次操作后没有被删除的边也要更新答案,WA了一发。
#include<cstdio>
#include<map>
using namespace std;
const int maxn=,maxm=;
int n,m;
struct node{
int sum;
node *lch,*rch;
node(){
sum=;
lch=rch=;
}
}t[maxm*];int cnt=;
node *root[maxn];
map<long long,int> dict;
void Insert(node *&rt,int k,int l,int r){
if(rt==){
++cnt;rt=t+cnt;
}
if(l==r){
rt->sum++;
return;
}
int mid=(l+r)>>;
if(k<=mid)Insert(rt->lch,k,l,mid);
else Insert(rt->rch,k,mid+,r);
rt->sum=;
if(rt->lch)rt->sum+=rt->lch->sum;
if(rt->rch)rt->sum+=rt->rch->sum;
}
int ql,qr,ans;
void query(node *rt,int l,int r){
if(rt==)return;
if(ql<=l&&r<=qr){
ans+=rt->sum;
return;
}
int mid=(l+r)>>;
if(ql<=mid)query(rt->lch,l,mid);
if(qr>mid)query(rt->rch,mid+,r);
}
int u[maxm],v[maxm],from[maxm],to[maxm];int tot=;
int res[maxn];
int main(){
scanf("%d%d",&n,&m);
char buf[];
int a,b;
for(int i=;i<=m;++i){
scanf("%s",buf);
if(buf[]=='!'){
scanf("%d",&a);
Insert(root[a],i,,m);
}else if(buf[]=='+'){
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);
dict[(a-)*1LL*n+b]=i;
}else{
scanf("%d%d",&a,&b);
if(a>b)swap(a,b);
++tot;
u[tot]=a;v[tot]=b;
from[tot]=dict[(a-)*1LL*n+b];
dict.erase((a-)*1LL*n+b);
to[tot]=i;
}
}
for(int i=;i<=tot;++i){
ql=from[i];qr=to[i];
ans=;
query(root[v[i]],,m);res[u[i]]+=ans;
ans=;
query(root[u[i]],,m);res[v[i]]+=ans;
}
for(map<long long,int>::iterator pt=dict.begin();pt!=dict.end();++pt){
ql=pt->second;qr=m;
a=(pt->first-)/n+;b=(pt->first)%n;
if(b==)b=n;
ans=;
query(root[a],,m);res[b]+=ans;
ans=;
query(root[b],,m);res[a]+=ans;
}
for(int i=;i<=n;++i)printf("%d%c",res[i],(i==n)?'\n':' ');
}
bzoj4419[SHOI2013]发微博的更多相关文章
- 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发微博(平衡树)
好友状态的变化次数不会超过m,于是考虑暴力,对每个人记录其好友关系的变化,通过前缀和计算贡献.这需要查询一段前缀时间内某人发的微博数量,可以离线建一棵绝对平衡的平衡树.事实上完全可以线性. #incl ...
- 【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成为了好友 ...
随机推荐
- jboss eap 6.2+ 版本中 加密datasource密码等敏感信息
默认情况下,在jboss eap 6.2+ 管理控制台创建datasource后,会在standalone.xml(独立模式)或host.xml(域模式)中以明文保存相关敏感信息. 这会给服务器留下安 ...
- js队列
用指针和数组模拟基本队列 http://blog.csdn.net/zhuwq585/article/details/53177192 js下的事件队列,或者异步队列 http://www.jb51. ...
- 使用 Socket 通信实现 FTP 客户端程序(来自IBM)
FTP 客户端如 FlashFXP,File Zilla 被广泛应用,原理上都是用底层的 Socket 来实现.FTP 客户端与服务器端进行数据交换必须建立两个套接字,一个作为命令通道,一个作为数据通 ...
- 调试记录:The public type <<classname>> must be defined in its own file
(摘自stackoverflow) “The public type <<classname>> must be defined in its own file” error ...
- 14-find 查找文件
find - search for files in a directory hierarchy 查找文件 [语法]: find [选项] [参数] [功能介绍] find命令用来在指定目录下查找文件 ...
- canvas模拟重力效果
总结 速度和加速度是动画的基础元素,其中两者都是向量,包括了一个重要因素:方向. 要学会应用 分解 和 合成 ,将速度或加速度分解到x.y轴上,然后将每条轴上的加速度或速度相加,然后再分别与物体的位置 ...
- html5 css3中的一些笔记
<!DOCTYPE html> <html> <head> <meta charset="utf-8" > <title> ...
- 美发帮--android APP开发实战
登陆界面,LinearLayout ImageView Button 用到了ImageView自动缩放,和自定义Button形状及State-Drawable,还用到了动画. 自定义控件之圆形 ...
- [转]CSS Display(显示) 与 Visibility(可见性)
CSS Display(显示) 与 Visibility(可见性) display属性设置一个元素应如何显示,visibility属性指定一个元素应可见还是隐藏. 隐藏元素 - display:non ...
- [转]servlet中的service, doGet, doPost方法的区别和联系
原文地址:http://m.blog.csdn.net/blog/ghyg525/22928567 大家都知道在javax.servlet.Servlet接口中只有init, service, des ...