nowcoder多校5I(计数+bit)

2023-12-23 01:50
文章标签 计数 bit 多校 nowcoder

本文主要是介绍nowcoder多校5I(计数+bit),希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题意看了半天(雾。。

然后可以发现1个点一定可以,2个点只要连线不与y平行就可以。。

然后考虑3个点的。。3个点的话画几次可以发现必须得是<的才可以。。

然后4个点发现怎么画都画不出来。。

然后主要是算3点的。。枚举顶点,需要找x比他小的,y和他不同的点个数。。分侧求出后乘起来即可。。

然后这个可以按x从大到小枚举一下,用bit去维护对应y上的位置(当然要离散化)。。

x相同的时候需要注意add的顺序。。

 

/***          ┏┓    ┏┓*          ┏┛┗━━━━━━━┛┗━━━┓*          ┃       ┃  *          ┃   ━    ┃*          ┃ >   < ┃*          ┃       ┃*          ┃... ⌒ ...  ┃*          ┃              ┃*          ┗━┓          ┏━┛*          ┃          ┃ Code is far away from bug with the animal protecting          *          ┃          ┃   神兽保佑,代码无bug*          ┃          ┃           *          ┃          ┃        *          ┃          ┃*          ┃          ┃           *          ┃          ┗━━━┓*          ┃              ┣┓*          ┃              ┏┛*          ┗┓┓┏━━━━━━━━┳┓┏┛*           ┃┫┫       ┃┫┫*           ┗┻┛       ┗┻┛*/
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<iostream>
#include<queue>
#include<cmath>
#include<map>
#include<stack>
#include<set>
#include<bitset>
#include<bits/stdc++.h>
#define inc(i,l,r) for(int i=l;i<=r;i++)
#define dec(i,l,r) for(int i=l;i>=r;i--)
#define link(x) for(edge *j=h[x];j;j=j->next)
#define mem(a) memset(a,0,sizeof(a))
#define ll long long
#define eps 1e-8
#define succ(x) (1LL<<(x))
#define lowbit(x) (x&(-x))
#define sqr(x) ((x)*(x))
#define mid (x+y>>1)
#define NM 100005
#define nm 100005
#define N 1000005
#define M(x,y) x=max(x,y)
const double pi=acos(-1);
const ll inf=998244353;
using namespace std;
ll read(){ll x=0,f=1;char ch=getchar();while(!isdigit(ch)){if(ch=='-')f=-1;ch=getchar();}while(isdigit(ch))x=x*10+ch-'0',ch=getchar();return f*x;
}struct P{int x,y;bool operator<(const P&o){return x>o.x||(x==o.x&&y<o.y);}
}p[NM];
int n,b[NM],m;
ll ans,a[NM];
void add(int x){for(;x<=m;x+=lowbit(x))a[x]++;}
int sum(int x,int s=0){for(;x;x-=lowbit(x))s+=a[x];return s;}int main(){n=read();inc(i,1,n)p[i].x=read(),b[i]=p[i].y=read();sort(b+1,b+1+n);m=unique(b+1,b+1+n)-b-1;inc(i,1,n)p[i].y=lower_bound(b+1,b+1+m,p[i].y)-b;sort(p+1,p+1+n);ans=(ll)n*(n-1)/2%inf;ans+=n;ans%=inf;p[n+1].x=inf;inc(i,1,n){int j;for(j=i;p[i].x==p[j].x;j++){ll t=sum(m)-sum(p[j].y),k=sum(p[j].y-1);ans+=k*t%inf;ans%=inf;}j--;inc(k,i,j)add(p[k].y);i=j;}inc(i,1,m){int t=sum(i)-sum(i-1);ans=(ans-t*(t-1)/2%inf+inf)%inf;}return 0*printf("%lld\n",ans);
}

 

vcd

链接:https://www.nowcoder.com/acm/contest/143/I
来源:牛客网
 

时间限制:C/C++ 2秒,其他语言4秒
空间限制:C/C++ 262144K,其他语言524288K
64bit IO Format: %lld

题目描述

Kanade has an infinity set H contain all of sets such as {(x,y)|x>=a,l<=y<=r}  (a,l,r are arbitrary real numbers)

A point set S is good if and only if for each subset T of S there exist h in H satisfy 

Now kanade has n distinct points and she want to know how many non-empty subset of these points is good.

You need to output the answer module 998244353

输入描述:

The first line has one integer nThen there are n lines,each line has two integers x,y denote a point (x,y)

输出描述:

Output the answer module 998244353

示例1

输入

复制

3
1 1
2 2
3 3

输出

复制

6

备注:

1<=n<=10^51<=x, y<=10^9

这篇关于nowcoder多校5I(计数+bit)的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/526318

相关文章

Linux使用粘滞位 (t-bit)共享文件的方法教程

《Linux使用粘滞位(t-bit)共享文件的方法教程》在Linux系统中,共享文件是日常管理和协作中的常见任务,而粘滞位(StickyBit或t-bit)是实现共享目录安全性的重要工具之一,本文将... 目录文件共享的常见场景基础概念linux 文件权限粘滞位 (Sticky Bit)设置共享目录并配置粘

[论文笔记]LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale

引言 今天带来第一篇量化论文LLM.int8(): 8-bit Matrix Multiplication for Transformers at Scale笔记。 为了简单,下文中以翻译的口吻记录,比如替换"作者"为"我们"。 大语言模型已被广泛采用,但推理时需要大量的GPU内存。我们开发了一种Int8矩阵乘法的过程,用于Transformer中的前馈和注意力投影层,这可以将推理所需

YOLOv8/v10+DeepSORT多目标车辆跟踪(车辆检测/跟踪/车辆计数/测速/禁停区域/绘制进出线/绘制禁停区域/车道车辆统计)

01:YOLOv8 + DeepSort 车辆跟踪 该项目利用YOLOv8作为目标检测模型,DeepSort用于多目标跟踪。YOLOv8负责从视频帧中检测出车辆的位置,而DeepSort则负责关联这些检测结果,从而实现车辆的持续跟踪。这种组合使得系统能够在视频流中准确地识别并跟随特定车辆。 02:YOLOv8 + DeepSort 车辆跟踪 + 任意绘制进出线 在此基础上增加了用户

归并排序/计数排序

1:归并排序 1.1:代码 void _MergeSort(int* arr, int left, int right, int* tmp){if (left >= right){return;}int mid = (left + right) / 2; _MergeSort(arr, left, mid, tmp); _MergeSort(arr, mid+1, righ

牛客小白月赛100(A,B,C,D,E,F三元环计数)

比赛链接 官方讲解 这场比较简单,ABC都很签到,D是个不太裸需要预处理的 B F S BFS BFS 搜索,E是调和级数暴力枚举,F是三元环计数。三元环考的比较少,没见过可能会偏难。 A ACM中的A题 思路: 就是枚举每个边变成原来的两倍,然后看看两短边之和是否大于第三边即可。 不能只给最短边乘 2 2 2,比如 1 4 8 这组数据,也不能只给第二短边乘 2 2 2,比

【CF】C. Glass Carving(二分 + 树状数组 + 优先队列 + 数组计数)

这题简直蛋疼死。。。。。 A了一下午 #include<cstdio>#include<queue>#include<cstring>#include<algorithm>using namespace std;typedef long long LL;const int maxn = 200005;int h,w,n;int C1[maxn],C2[maxn];int

2015多校联合训练第三场Work(hdu5326)

题意: a是b的上司,b是c的上司,则a是c的上司,问构成一个树种,有多人是 k个人的上司 思路: 先找出root,然后dfs一下就行 #include <bits/stdc++.h>#define LL long longusing namespace std;const int MAXN = 1e6;int f[105];int n, k;int mp[101][101];

2015年多校联合训练第三场RGCDQ(hdu5317)

题意: f(i)代表i数中有的素数的种数,给出区间[l,r],求区间内max(gcd(f(i))), 由于i最大是1e6,2*3*5*7*11*13*17>1e6,故最多不超过7种素数, 先打表打出1e6内的素数种数表,然后用sum[i][j]代表1-i个数中,还有j个素数的个数,最后用sum[r][j] - sum[l-1][j]求出区间内含有j个素数的数的个数,暴力找出1,2,3,4,5

2015多校联合训练第一场Tricks Device(hdu5294)

题意:给一个无向图,给起点s,终点t,求最少拆掉几条边使得s到不了t,最多拆几条边使得s能到t 思路: 先跑一边最短路,记录最短路中最短的边数,总边数-最短边数就是第二个答案 第一个答案就是在最短路里面求最小割,也就是求最大流,然后根据最短路在建个新图,权为1,跑一边网络流 模板题,以后就用这套模板了 #include <iostream>#include <cstdio>#incl

2015多校联合训练第一场Assignment(hdu5289)三种解法

题目大意:给出一个数列,问其中存在多少连续子序列,子序列的最大值-最小值< k 这题有三种解法: 1:单调队列,时间复杂度O(n) 2:RMQ+二分,时间复杂度O(nlogn) 3:RMQ+贪心,时间复杂度O(nlogn) 一:RMQ+二分 RMQ维护最大值,最小值,枚举左端点i,二分找出最远的符合的右端点j,答案就是ans += j - i+1;(手推一下就知道) 比如1 2 3