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