CF297E-Mystic Carvings【树状数组】
正题
题目链接:https://www.luogu.com.cn/problem/CF297E
题目大意
2∗n2*n2∗n个点的圆,nnn条圆上不交的弦,选择三条使得每条弦对应的弧上的点数量相等。
解题思路
就这5种情况,其中满足条件的是222和555,我们用容斥去掉1,3,41,3,41,3,4即可。
对于每条弦,我们用树状数组维护出在它左边和右边且不与他相交的弦的数量x,yx,yx,y,然后与它相交的数量就是z=n−1−x−yz=n-1-x-yz=n−1−x−y。
第一种情况的个数就是x∗yx*yx∗y,第3,43,43,4种的和就是z∗(x+y)z*(x+y)z∗(x+y)
codecodecode
#include<cstdio>
#include<cstring>
#include<algorithm>
#define ll long long
#define lowbit(x) (x&-x)
using namespace std;
const int N=2e5+10;
ll n,ans;
struct node{ll l,r;
}p[N];
struct Tree_Array{ll t[N];void Change(ll x,ll val){while(x<=2*n){t[x]+=val;x+=lowbit(x);}return;}ll Ask(ll x){ll ans=0;while(x){ans+=t[x];x-=lowbit(x);}return ans;}
}Ta,Tp;
bool cmp(node x,node y)
{return x.r<y.r;}
int main()
{scanf("%lld",&n);for(ll i=1;i<=n;i++){scanf("%lld%lld",&p[i].l,&p[i].r);if(p[i].r<p[i].l) swap(p[i].l,p[i].r);}sort(p+1,p+1+n,cmp);for(ll i=1;i<=n;i++)Ta.Change(p[i].l,1);ans=n*(n-1)*(n-2)/6ll;for(ll i=1;i<=n;i++){Ta.Change(p[i].l,-1);ll z=Tp.Ask(p[i].l)+Ta.Ask(p[i].r)-Ta.Ask(p[i].l);ll x=(p[i].r-1-p[i].l-z)/2,y=n-1-z-x;ans-=x*y+z*(x+y)/2;Tp.Change(p[i].l,1);Tp.Change(p[i].r,-1);}printf("%lld",ans);
}
CF297E-Mystic Carvings【树状数组】相关推荐
- 洛谷 P5057 [CQOI2006]简单题(树状数组)
嗯... 题目链接:https://www.luogu.org/problem/P5057 首先发现这道题中只有0和1,所以肯定与二进制有关.然后发现这道题需要支持区间更改和单点查询操作,所以首先想到 ...
- Color the ball(HDU1556)树状数组
每次对区间内气球进行一次染色,求n次操作后后所有气球染色次数. 树状数组,上下区间更新都可以,差别不大. 1.对于[x,y]区间,对第x-1位减1,第y位加1,之后向上统计 #include<b ...
- 【BZOJ2434】[NOI2011]阿狸的打字机 AC自动机+DFS序+树状数组
[BZOJ2434][NOI2011]阿狸的打字机 Description 阿狸喜欢收藏各种稀奇古怪的东西,最近他淘到一台老式的打字机.打字机上只有28个按键,分别印有26个小写英文字母和'B'.'P ...
- Codeforces 629D Babaei and Birthday Cake(树状数组优化dp)
题意: 线段树做法 分析: 因为每次都是在当前位置的前缀区间查询最大值,所以可以直接用树状数组优化.比线段树快了12ms~ 代码: #include<cstdio> #include< ...
- poj_3067 树状数组
题目大意 左右两个竖排,左边竖排有N个点,从上到下依次标记为1,2,...N; 右边竖排有M个点,从上到下依次标记为1,2....M.现在从K条直线分别连接左边一个点和右边一个点,求这K条直线的交点个 ...
- hdu 1166 敌兵布阵(树状数组)
题意:区间和 思路:树状数组 #include<iostream> #include<stdio.h> #include<string.h> using names ...
- Equalizing Two Strings 冒泡排序or树状数组
首先考虑排序后相等 如果排序后相等的话就只考虑reverse长度为2的,所以a或者b排序后存在相邻两个字母相等的话就puts YES,n>26也直接puts YES 不然的话就假设c为a,b排完 ...
- Hdu 6534 Chika and Friendly Pairs 莫队算法+树状数组
题目链接 题意求给区间[L,R]中有少对(i,j)满足i<j且abs(a[i]-a[j])<=k. 首先来说暴力的方法就是离散化,然后用树状数组来维护,但是m次询问,m很大,所以说一定会t ...
- HDU - 5877 Weak Pair 2016 ACM/ICPC 大连网络赛 J题 dfs+树状数组+离散化
题目链接 You are given a rootedrooted tree of NN nodes, labeled from 1 to NN. To the iith node a non-neg ...
最新文章
- tree类型题目需要用到的头文件tree.h
- java转换CSV文件生成xml格式数据
- X86汇编——简易通讯录
- 核密度估计python_非参数估计:核密度估计KDE
- CCIE-LAB-第二篇-端口聚合LACP+RSTP
- 系统设计面试的答题思维框架
- 将 nginx 安装成 windows 的方法
- android文件系统挂载过程,有线挂载Android4.2文件系统
- TensorFlow——Ubuntu系统上TensorFlow的安装教程
- vue-cli配置环境:
- ssm read time out的原因_为什么得肝病的男人越来越多?爱喝酒不是原因,或跟老婆有关系!...
- IplImage 加载图像
- 电路图精简版(web内置画图软件)
- 希尔排序--简单易懂图解
- 让人寒心,义工丛飞资助的是一群白眼狼?
- (E1)ENVI-met介绍及下载
- 《王者荣耀游戏服务器架构演进(完整版)》读后感
- cf大区服务器显示人数合区后,穿越火线:各大区终合并,跨区作战成现实,以后就只有4个大区了!...
- 测试工程师多年面试问题整理
- Rstudio的安装操作
热门文章
- php语言难点,PHP知识难点TOP3,挑战一下你
- php 面向对象 教程,PHP学习笔记之面向对象设计_PHP教程
- 得出来的视差图左边有黑色补上原图_掌握这10个抠图方法,帮你轻松应对大部分抠图工作!(动图演示...
- java socket send_java socket编程
- windows安全模式_鲁大师正式挂牌上市,使用鲁大师如何开启笔记本电脑全面节能模式...
- 循环遍历多层json_面试官:JSON.stringify() 实现深拷贝有什么问题
- leetcode617. 合并二叉树
- [mybatis]Mapper XML Files_获取自增主键的值
- [PAT乙级]1018 锤子剪刀布
- C++,Java编程中 标识符 常见命名约定