Codeforces 12D Ball 树形阵列模拟3排序元素
2015-07-11 15:33
579 查看
主题链接:点击打开链接
#include<stdio.h> #include<iostream> #include<string.h> #include<set> #include<vector> #include<map> #include<math.h> #include<queue> #include<string> #include<stdlib.h> #include<algorithm> using namespace std; #define N 500005 #define ll int ll n; ll c , maxn; inline ll lowbit(ll x){return x&(-x);} void change(ll pos, ll val){ while(pos)c[pos]=max(c[pos],val), pos-=lowbit(pos); } ll maxx(ll pos){ ll ans = -1; while(pos<=maxn)ans = max(ans,c[pos]),pos+=lowbit(pos); return ans; } struct node{ ll b[3],num; }w ; bool cmp0(node x, node y){return x.b[0]<y.b[0];} bool cmp1(node x, node y){return x.b[1]>y.b[1];} int main(){ ll i,j; while(cin>>n) { for(i=0;i<n;i++)scanf("%d",&w[i].b[0]); for(i=0;i<n;i++)scanf("%d",&w[i].b[1]); for(i=0;i<n;i++)scanf("%d",&w[i].b[2]); sort(w, w+n, cmp0); ll rank = 1; w[0].num = 1; for(i=1;i<n;i++) { if(w[i].b[0]==w[i-1].b[0])w[i].num = rank; else w[i].num = ++rank; } sort(w,w+n,cmp1); for(i=1;i<=rank;i++)c[i]=-1; maxn = rank; i = 0; ll ans = 0; while(i<n) { for(j = i; j < n && w[i].b[1] == w[j].b[1]; j++) if(maxx(w[j].num+1)>w[j].b[2]) ans++; for(j = i; j < n && w[i].b[1] == w[j].b[1]; j++) change(w[j].num, w[j].b[2]); i = j; } cout<<ans<<endl; } return 0; }
相关文章推荐
- 独处可以激发思考的力量
- 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值
- 16_Android生命周期再介绍,通过androidconfigChanges属性让界面旋转时不改变状态中保留的值
- win7_oracle11g_64位连接32位PLSQL_Developer
- 面试——腾讯
- puppet3.3.1-(二)-puppet3.3.1源码安装配置
- rabbitmq的java简单的实现
- 把情感装入理性之盒
- extjs_11_mvc模式
- linux命令(1)---ls
- 织梦系统如何插入优酷视频?
- 黑马程序员——OC基础---内存管理(autorelease,ARC)
- GCD 定时器
- C++多线程编程
- HUD——5194
- Android学习笔记(5)--系统编译
- Ubuntu下NDK_MODULE_PATH设置
- 【汇编指令学习】条件转移指令JAE/JNB
- 转:Android 的一些比较好的开源代码项目
- 随着现实的变化,我们必须随之调整自己的观念、思想、行动及目标