首页 > 其他分享 >每日一题-Contest

每日一题-Contest

时间:2023-05-27 12:22:48浏览次数:42  
标签:Contest int 每日 三元组 一题 include ll define

Contest
本来以为要cdq什么的
看了题解之后发现它的排名是不重的(题目里好像没说啊)。

那么我们可以发现,对于两个三元组,如果对答案造成贡献,那么它们的关系一定是两个大于一个小于 或是两个小于一个大于,那么我们对任意两个求逆序对,这个三元组恰好被计算两次。

#include<cstdio>
#include<algorithm>
#include<cstring>
#include<queue>
#define fo(i,a,b) for (int (i)=(a);(i)<=(b);(i)++)
#define fd(i,b,a) for (int (i)=(b);(i)>=(a);(i)--)
#define A puts("Yes") 
#define B puts("No")
using namespace std;
typedef long long ll;
const int N=2e5+5;
const ll mo=1e9+7;
ll ans;
int n;
struct node{
	int x,y,z;
}; 
node a[N];
int c[N];
int lowbit(int x){
	return x&(-x);
}
void upd(int x){
	for (;x<N;x+=lowbit(x)) {
		c[x]++;
	}
}
ll ask(int x){
	ll s=0;	
	for (;x;x-=lowbit(x)){
		s+=c[x];
	}
	return s;
}
bool cmp1(node a,node b){
	return a.x<b.x;
}
bool cmp2(node a,node b){
	return a.y<b.y;
}
bool cmp3(node a,node b){
	return a.z<b.z;
}
int main(){
	
//	freopen("data.in","r",stdin);		
	scanf("%d",&n);
	fo(i,1,n) {
		scanf("%d %d %d",&a[i].x, &a[i].y, &a[i].z);
	}
	
	memset(c,0,sizeof(c));
	sort(a+1,a+n+1,cmp1);
	fo(i,1,n) {
		ans+=i-1-ask(a[i].y);
		upd(a[i].y);
	}
	
	memset(c,0,sizeof(c));
	fo(i,1,n) {
		ans+=i-1-ask(a[i].z);
		upd(a[i].z);
	}
	
	memset(c,0,sizeof(c));
	sort(a+1,a+n+1,cmp2);
	fo(i,1,n) {
		ans+=i-1-ask(a[i].z);
		upd(a[i].z);
	}
	
	printf("%lld",ans/2);
	return 0;
}
  



 

标签:Contest,int,每日,三元组,一题,include,ll,define
From: https://www.cnblogs.com/ganking/p/17436548.html

相关文章

  • Atcoder Grand Contest 062 D - Walk Around Neighborhood
    csy/bxwjz/bx首先将\(a\)排序,如果\(\sum\limits_{i=1}^{n-1}a_i<a_n\)显然就是\(-1\),否则必然有解。先发现一个trivial的事情,就是答案一定位于\([\dfrac{a_n}{2},a_n]\)中,这是因为我们判掉无解的条件之后,我们必然可以用前面的步数走到以\((a_n,0),(0,a_n),(-a_n,0),(......
  • 2023/5/26每日随笔
    今天,上了很多课,计算机网络不会,概率论这节课学的还行,然后,下午上web学习了vue框架,ajax,以及element,学的有点空,学到些东西,就是考试应该用不上,毕竟不熟,感觉之前的应该可以应付作业,还学习了数据库的视图,毕竟要考试了,额。。。......
  • 5.26每日总结
    今天继续完成团队项目与队友进行合作,对项目功能和交互页面进行完善,基本完成了整个App的功能,上午上课在实验室做了计算机网络的实验,学习和应用了配置IP地址,简单的学习和了解了真实的交换机和路由器。......
  • 5.26每日总结
    <%@pageimport="san.Thesql"%><%@pageimport="san.Pd_stu"%><%@pagelanguage="java"contentType="text/html;charset=UTF-8"pageEncoding="UTF-8"%><!DOCTYPEhtmlPUBLIC......
  • 每日打卡
    回文素数问题描述:回文素数是数字以中间一个数或两个数成对称的素数,求1000以内的回文素数问题分析:先用倒序数的方法判断是否为素数,再穷举出其中的回文数代码:#include<stdio.h>#include<math.h>intfun(intn);intmain(){           inti,j,k,l,m;     ......
  • 每日打卡一小时(第三十五天)
    一.问题描述设计一个void类型的函数reverse_string,其功能是将一个给定的字符串逆序。例如,给定字符串为“hello”,逆序后为“olleh”。二.设计思路注意字符串的结束标志二.代码实现#include<iostream>#include<string>usingnamespacestd;voidreverse_string(string&a......
  • 2023.5.26每日总结
    packageservlets;importjava.io.IOException;importjava.util.ArrayList;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjava......
  • 每日打卡-32
    一.问题描述平衡字符串中,'L'和'R'字符的数量是相同的。给你一个平衡字符串s,请你将它分割成尽可能多的子字符串,并满足:每个子字符串都是平衡字符串。返回可以通过分割得到的平衡字符串的最大数量。二.设计思路这道题要求尽可能多的切割平衡字符串我们通过观察例题以及......
  • 每日打卡-33
    一.问题描述给你一个整数数组prices,其中prices[i]表示某支股票第i天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候最多只能持有一股股票。你也可以先购买,然后在同一天出售。返回你能获得的最大利润。二.设计思路其实你完全没有必要去想怎......
  • AtCoder Regular Contest 139 E Wazir
    洛谷传送门AtCoder传送门好题。这种题一般可以考虑,观察最优解的性质,对于性质计数。发现如果\(n,m\)均为偶数,可以放满。就是类似这样:#.#.#..#.#.##.#.#..#.#.#因此答案就是\(2\)。如果\(n,m\)有一个为偶数,不妨假设\(n\)为偶数。那么最优解形似:#.#...#..##..#......