链接:https://ac.nowcoder.com/acm/contest/16/A
来源:牛客网
题目描述
FST是一名可怜的小朋友,他很强,但是经常fst,所以rating一直低迷。
但是重点在于,他非常适合ACM!并在最近的区域赛中获得了不错的成绩。
拿到奖金后FST决定买一台新笔记本,但是FST发现,在价格能承受的范围内,笔记本的内存和速度是不可兼得的。
可是,有一些笔记本是被另外一些“完虐”的,也就是内存和速度都不高于另外某一个笔记本,现在FST想统计一下有多少笔记本被“完虐”。
但是重点在于,他非常适合ACM!并在最近的区域赛中获得了不错的成绩。
拿到奖金后FST决定买一台新笔记本,但是FST发现,在价格能承受的范围内,笔记本的内存和速度是不可兼得的。
可是,有一些笔记本是被另外一些“完虐”的,也就是内存和速度都不高于另外某一个笔记本,现在FST想统计一下有多少笔记本被“完虐”。
输入描述:
第一行一个正整数n,i
表示笔记本的数量。接下来n行,每行两个正整数M
,Si
表示这款笔记本的内存和速度。5
n≤10
,Mi
,Si
≤109
输出描述:
一行,一个正整数,表示被完虐的笔记本数。
备注:
Mi
和Si
都是越大越优。i
数据保证M
互不相同,Si
也互不相同。
代码:
#include<cstdio> #include<cstring> #include<iostream> #include<algorithm> #include<queue> #include<stack> #include<set> #include<map> #include<vector> #include<cmath> const int maxn=2e5+5; typedef long long ll; using namespace std; struct node { int l,r; int num; }tree[maxn<<2]; struct node1 { int a,b; bool friend operator <(node1 x,node1 y) { return x.a>y.a; } }p[maxn]; vector<int>v; void build(int m,int l,int r) { tree[m].l=l; tree[m].r=r; tree[m].num=0; if(l==r) { return ; } int mid=(l+r)>>1; build(m<<1,l,mid); build(m<<1|1,mid+1,r); } void update(int m,int pos,int val) { if(tree[m].l==tree[m].r&&tree[m].l==pos) { tree[m].num=val; return ; } int mid=(tree[m].l+tree[m].r)>>1; if(pos<=mid) update(m<<1,pos,val); else { update(m<<1|1,pos,val); } tree[m].num=(tree[m<<1].num+tree[m<<1|1].num); } int query(int m,int l,int r) { if(tree[m].l==l&&tree[m].r==r) { return tree[m].num; } int mid=(tree[m].l+tree[m].r)>>1; if(r<=mid) { return query(m<<1,l,r); } else if(l>mid) { return query(m<<1|1,l,r); } else { return query(m<<1,l,mid)+query(m<<1|1,mid+1,r); } } int getid(int x) { return lower_bound(v.begin(),v.end(),x)-v.begin()+1; } int main() { int n; cin>>n; for(int t=0;t<n;t++) { scanf("%d%d",&p[t].a,&p[t].b); v.push_back(p[t].a); v.push_back(p[t].b); //p[t].pos=t; } sort(v.begin(),v.end()); v.erase(unique(v.begin(),v.end()),v.end()); sort(p,p+n); build(1,1,2*n); ll ans=0; for(int t=1;t<n;t++) { update(1,getid(p[t-1].b),1); if(query(1,getid(p[t].b),2*n)) { // cout<<query(1,1,getid(p[t].b)-1)<<endl; ans++; } } printf("%lld ",ans); return 0; }