题意:给你一个初始没有边,点权均为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]发微博的更多相关文章

  1. BZOJ4419: [Shoi2013]发微博 暴力

    Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x   表示用户x发了一条微博: + x y 表示用户x和用 ...

  2. BZOJ4419:[SHOI2013]发微博(乱搞)

    Description 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x   表示用户x发了一条微博: + x y 表示用户x和用 ...

  3. BZOJ4419 SHOI2013发微博(平衡树)

    好友状态的变化次数不会超过m,于是考虑暴力,对每个人记录其好友关系的变化,通过前缀和计算贡献.这需要查询一段前缀时间内某人发的微博数量,可以离线建一棵绝对平衡的平衡树.事实上完全可以线性. #incl ...

  4. 【BZOJ4419】[SHOI2013]发微博(???)

    [BZOJ4419][SHOI2013]发微博(???) 题面 BZOJ 洛谷 题解 一道\(easy\),每个点维护一下要给周围的点加上多上,如果额外连了一个点进来就给他把标记减掉,如果删掉了一条边 ...

  5. [BZOJ 4419][Shoi2013]发微博

    4419: [Shoi2013]发微博 Time Limit: 10 Sec  Memory Limit: 256 MBSubmit: 665  Solved: 364[Submit][Status] ...

  6. BZOJ 4419: [Shoi2013]发微博 set模拟

    4419: [Shoi2013]发微博 题目连接: http://www.lydsy.com/JudgeOnline/problem.php?id=4419 Description 刚开通的SH微博共 ...

  7. 洛谷 P3998 [SHOI2013]发微博

    洛谷 P3998 [SHOI2013]发微博 洛谷传送门 题目描述 刚开通的 SH 微博共有n个用户(1Ln标号),在这短短一个月的时间内, 用户们活动频繁,共有m 条按时间顺序的记录: ! x 表示 ...

  8. P3998 [SHOI2013]发微博 方法记录

    原题链接 [SHOI2013]发微博 题目描述 刚开通的 SH 微博共有 \(n\) 个用户(\(1\sim n\) 标号),在这短短一个月的时间内,用户们活动频繁,共有 \(m\) 条按时间顺序的记 ...

  9. 【bzoj4419】[Shoi2013]发微博 STL-set

    题目描述 刚开通的SH微博共有n个用户(1..n标号),在短短一个月的时间内,用户们活动频繁,共有m条按时间顺序的记录: ! x   表示用户x发了一条微博: + x y 表示用户x和用户y成为了好友 ...

随机推荐

  1. spring WebSocket详解

    场景 websocket是Html5新增加特性之一,目的是浏览器与服务端建立全双工的通信方式,解决http请求-响应带来过多的资源消耗,同时对特殊场景应用提供了全新的实现方式,比如聊天.股票交易.游戏 ...

  2. 极简Word排版示例(以Word2013为例)

    文档标题 第一行写下文档的名字,居中,微软雅黑字体,三号 章节标题 每一章的标题单独一行,光标选中这行,设置为标题1 每一节的标题单独一行,光标选中这行,设置为标题2 全部章节标题设置完毕后,下一步 ...

  3. CoreBluetooth——IOS蓝牙4.0使用心得

    原文链接:http://m.blog.csdn.net/article/details?plg_nld=1&id=51014318&plg_auth=1&plg_uin=1&a ...

  4. 让 HTML5 来为你定位

    Geolocation HTML5 的 geolocation 是一个令人兴奋的 API,通过这套 API,Javascript 代码就能够访问到用户的当前位置.当然,访问之前必须得到用户的明确认可, ...

  5. 理解JavaScript中的参数传递 - leetcode189. Rotate Array

    1.关于leetcode 这是第一篇关于leetcode的题解,就先扯点关于leetcode的话. 其实很早前就在博客园看到过leetcode一些题解,总以为跟一般OJ大同小异,直到最近点开了一篇博文 ...

  6. 判断Laravel Eloquent获取数据结果集是否为空

    在使用Laravel Eloquent模型时,我们可能要判断取出的结果集是否为空,但我们发现直接使用is_null或empty是无法判段它结果集是否为空的. var_dump之后我们很容易发现,即使取 ...

  7. Windows下搭建PHP环境:Apache+PHP+MySQL

    本文简单记录一下Windows下搭建PHP环境的过程,一些细节可以参照本文参考资料,此文不再赘述 准备工作: Windows下手工搭建PHP环境需要先下载相应的软件,需要注意的是Apache与PHP的 ...

  8. poj-1314 Finding Rectangles

    题目地址: http://poj.org/problem?id=1314 题意: 给出一串的点,有些点可以构成正方形,请按照字符排序输出. 因为这道题的用处很大, 最近接触的cv 中的Rectangl ...

  9. 常用数据库高可用和分区解决方案(1) — MySQL篇

    在本文中我们将会讨论MySQL.Oracle.MongoDB.Redis以及Oceanbase数据库,大家可能会奇怪为什么看不到有名关系型数据库MSSQL.DB2或者有名NoSQL数据库Hbase.L ...

  10. centos 20T硬盘(超过16T)分区

    最近新买了一台服务器DELL R730 首先我们做了一个raid 1 和raid 5 在raid 1 上安装系统 安装完系统之后,现在要进行分区了,那个raid 5 做完之后,实际大小是19T 所以这 ...