问题 G: 鸽子 (gu)-------------------------思维(二维树状数组)
题目描述
一共有n个人依次走进机房,第i个人的实力为ai。
第i个人在走进机房时,会膜拜当前已经在机房里的人x,当且仅当ax>ai。
同理,第i个人在走进机房时,会被当前已经在机房里的人x膜拜,当且仅当ax<ai。
第i个人的音量为vi。设他在走进机房的时候,膜拜了k个人,那么,他会产生vi×k的噪音值。
假设他走进机房时,膜拜他的人的集合为{s1,s2,s3,…,sm},那么这些人会产生***的噪音值。
ctt2006巨佬想知道,每个人走进机房时,当前总共会产生多少噪音值。由于他忙着吊打集训队,于是把问题交给
输入
第一行一个正整数n,表示人数。
接下来n行,每行两个数ai,vi,意义见题目描述。
输出
一行n个数,以空格分隔。第i个数表示第i个人走进机房时(包括之前)产生的噪音。
由于这些值可能很大,只要输出它们mod 998244353的值即可。
样例输入 Copy
5
3 1
2 3
1 4
5 2
4 5
样例输出 Copy
0 3 11 19 32
提示
样例1解释:
第一个人走进机房,由于只有一个人,噪音为0;
第二个人走进机房,比他强的有1,没有比他弱的人,当前总共产生:3×1=3噪音;
第三个人走进机房,比他强的有1,2,没有比他弱的人,当前总共产生:3×1+4×2=11噪音;
第四个人走进机房,没有比他强的人,比他弱的人有1,2,3,当前总共产生:3×1+4×2+1+3+4=19噪音;
第五个人走进机房,比他强的有4,比他弱的有1,2,3,当前总共产生:3×1+4×2+1+3+4+1+3+4+5=19噪音。
解析:
由题意可知,每个人进入机房都需要维护两个值,
一个是膜拜第i个人的噪音总和
一个是第i个人膜拜机房大佬的总和
对于第一个值,我们只要二维树状数组维护即可
#include<bits/stdc++.h>
using namespace std;
typedef long long ll;
const int MOD=998244353;
const int N=5e5+10000;
ll c[N][2];
ll a[N],b[N],num[N];
ll sum[N];
int n;
int lowbit(int x)
{return x&(-x);
}
void add(int i,int val,int u)
{while(i<N){c[i][u]=(c[i][u]+val)%MOD;i+=lowbit(i);}
}
ll ask(int i,int u)
{ll res=0;while(i){res=(res+c[i][u])%MOD;i-=lowbit(i);}return res;
}
int main()
{scanf("%d",&n);for(int i=1;i<=n;i++)scanf("%lld %lld",&a[i],&b[i]),num[i]=a[i];sort(num+1,num+1+n);int m=unique(num+1,num+1+n)-num;for(int i=1;i<=n;i++){int k=lower_bound(num+1,num+1+m,a[i])-num;//cout<<k<<endl;add(k,1,1);add(k,b[i],2);ll val=ask(k-1,2);val=(val+(ask(N-1,1)-ask(k,1))*b[i]%MOD)%MOD;sum[i]=val;}for(int i=1;i<=n;i++){sum[i]=(sum[i-1]+sum[i])%MOD;cout<<sum[i]%MOD<<" ";}}
问题 G: 鸽子 (gu)-------------------------思维(二维树状数组)相关推荐
- HDU-水饺基情 二维树状数组
该题就是简单的二维树状数组,保留一份棋盘的最新状态即可,树状数组里面就只保留在原有基础上增加或者减少的某一种饺子的数量. 代码如下: #include <cstring> #include ...
- 二维树状数组 ----2021广东省赛 ----- K - Kera‘s line segment[区间转二维平面+树状数组维护前缀最小最大值]
题目链接 题目大意: 就是一个一维的数轴上面有一堆线段用一个三元组(l,r,val)(l,r,val)(l,r,val)表示. 现在我们有两个操作: 就是往数轴上面添加线段 询问[L,R][L,R][ ...
- szu 寒训第二天 树状数组 二维树状数组详解,以及树状数组扩展应用【求逆序对,以及动态第k小数】
树状数组(Binary Index Tree) 树状数组可以解决可以转化为前缀和问题的问题 这是一类用以解决动态前缀和的问题 (有点像线段树简版) 1.对于 a1 + a2 + a3 + - + an ...
- 【二维树状数组】See you~
https://www.bnuoj.com/v3/contest_show.php?cid=9148#problem/F [题意] 给定一个矩阵,每个格子的初始值为1.现在可以对矩阵有四种操作: A ...
- POJ_1195 Mobile phones 【二维树状数组】
题目链接:http://poj.org/problem?id=1195 纯纯的二维树状数组,不解释,仅仅须要注意一点,由于题目中的数组从0開始计算,所以维护的时候须要加1.由于树状数组的下标是不能为1 ...
- 洛谷1527(bzoj2738)矩阵乘法——二维树状数组+整体二分
题目:https://www.luogu.org/problemnew/show/P1527 不难想到(?)可以用二维树状数组.但维护什么?怎么查询是难点. 因为求第k小,可以考虑记权值树状数组,把比 ...
- 二维树状数组 BZOJ 1452 [JSOI2009]Count
题目链接 裸二维树状数组 #include <bits/stdc++.h>const int N = 305; struct BIT_2D {int c[105][N][N], n, m; ...
- HDU-4456 Crowd 二维树状数组+坐标转换
题意:给定一个N*N的网格,现在M组操作,一种操作时改变网格上的某个单点的权值,另外一种操作是求到一点曼哈顿距离为小于等于k的所有的权值和,初始化网格所有点的权值为0. 解法:这题如果没有那些特定的条 ...
- hdu 1892二维树状数组
这题我知道是用树状数组,可是好久没打树状数组了,就想用普通方法水过去~~结果--结果--水了好多方法都水不过,出题人真狠呐--我的水方法是对于每一次查询,初始化ans=(x2-x1+1)*(y2-y1 ...
最新文章
- 【Live555】live555源码详解(一):BasicUsageEnvironment、UsageEnvironment
- 谈从10亿个数中找出前10万个最大的
- VLC for android 编译错误
- jsp获取当前时间存入mysql数据库_jsp获取当前时间插入Mysql数据库?
- ubuntu mysql 初始化_Ubuntu初始化MySQL碰到的坑
- transition transform
- 如何用vue实现模态框组件
- php macro,如何利用 macro 方法来扩展 Laravel 的基础类的功能
- Storm 实战:构建大数据实时计算
- 从零基础入门Tensorflow2.0 ----八、40. keras分布式实战
- MYsql数据库练习题
- Adams2019安装教程链接分享
- Java 如何获取线程状态呢?
- 【Unity Shader】(十) ------ UV动画原理及简易实现
- 中国科学技术大学计算机考研好考吗,中国科学技术大学计算机考研复习方法谈...
- 查找FB15k-237 entity id对应实体数据
- prisma orm_如何使用Node.js和Prisma构建GraphQL服务器
- caution: filename not matched:xxx
- 七:对微服务配置中心的理解
- 如何一步一步地获取和风天气的天气数据