好友状态的变化次数不会超过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 ;
}

最新文章

  1. MikroTik RouterOS防火墙与过滤详解
  2. Oracle LPAD/RPAD函数在处理中文时的注意事项
  3. 说说 PWA 和微信小程序--Progressive Web App
  4. Linux 安装 nginx注意
  5. 【Oracle学习笔记-4】内连接和外连接的区别
  6. 黄聪:wordpress如何获取当前页面的URL
  7. ice介绍 z
  8. 安装Java
  9. C++ Primer 学习笔记_98_特殊的工具和技术 --优化内存分配
  10. Express+Mongoose(MongoDB)+Vue2全栈微信商城项目全记录
  11. ant 执行jmeter
  12. [Basics] 递归
  13. vue 用huilder打包APP时,安卓按返回键就退出App改为按两次再退出App
  14. Python 练习:三级菜单选择城市(二)
  15. 牛客训练二:处女座的签到题(STL+精度+三角形求面积公式)
  16. 字符编码笔记:ASCII,Unicode和UTF-8(转载)
  17. day27&lt;反射&amp;JDK5新特性&gt;
  18. oracle之 RAC 11G ASM下控制文件多路复用
  19. PAT 甲级 1023 Have Fun with Numbers
  20. 【BZOJ】4430: [Nwerc2015]Guessing Camels赌骆驼

热门文章

  1. CacheCloud+Redis Cluster 3部署
  2. ASP.NET Web用户控件
  3. 洛谷 U45568 赌神:决斗
  4. Node.js 学习笔记 (一) 安装配置
  5. py函数初识
  6. 014---Django的中间件
  7. Apache Tomcat 整合
  8. R语言学习笔记(五):零碎知识点(11-15)
  9. c++ map的使用方法
  10. python基础之反射、面向对象进阶