题目
题意: 给定n个数,求ans[i].ans[i]表示比i小且二者不存在矛盾的数的数量. 给定m对关系,表示两个数之间有矛盾.
思路: 我直接树状数组维护不就完了,这个矛盾不知道怎么处理。 但是冷静分析,可以在输入m对关系的时候预处理一下,提前存储比x小的且有矛盾的数。 ans[i] = sum(a[i] - 1) - cnt[i]. 二分和树状数组都可.
代码:
#include
using namespace std;
const int N = 2e5+10;
int n,m,k,T;
int a[N];
int b[N];
int cnt[N]; //表示有多少个数小于a[i]
int main(void)
{
ios::sync_with_stdio(false),cin.tie(0),cout.tie(0);
cin>>n>>m;
for(int i=1;i>a[i]; b[i] = a[i];
}
sort(b+1,b+n+1);
while(m--)
{
int x,y; cin>>x>>y;
if(a[x] > a[y]) cnt[x] ++ ; //排序后y在x前边
else if(a[x]
关注
打赏
最近更新
- 深拷贝和浅拷贝的区别(重点)
- 【Vue】走进Vue框架世界
- 【云服务器】项目部署—搭建网站—vue电商后台管理系统
- 【React介绍】 一文带你深入React
- 【React】React组件实例的三大属性之state,props,refs(你学废了吗)
- 【脚手架VueCLI】从零开始,创建一个VUE项目
- 【React】深入理解React组件生命周期----图文详解(含代码)
- 【React】DOM的Diffing算法是什么?以及DOM中key的作用----经典面试题
- 【React】1_使用React脚手架创建项目步骤--------详解(含项目结构说明)
- 【React】2_如何使用react脚手架写一个简单的页面?