5015. 决斗
来源:互联网 发布:nginx 反向代理403 编辑:程序博客网 时间:2024/04/29 17:32
题目大意
敌人有
精灵依次进入和侏儒决斗,如果他配对的侏儒已经有对手,就顺势针找下一个。
找到一种安排顺序,求最多能赢多少局。
Data Constraint
题解
设
然后从
时间复杂度:
SRC
#include<cstdio>#include<cstdlib>#include<cstring>#include<iostream>#include<algorithm>#include<vector>#include<set>using namespace std ;#define N 500000 + 10vector < int > B[N] ;set < int > Q ;int R[N] ;int A[N] , P[N] , V[N] ;int n , ans ;int main() { freopen( "fight.in" , "r" , stdin ) ; freopen( "fight.out" , "w" , stdout ) ; scanf( "%d" , &n ) ; for (int i = 1 ; i <= n ; i ++ ) { scanf( "%d" , &A[i] ) ; B[A[i]].push_back(i) ; R[A[i]] ++ ; } for (int i = 1 ; i <= n ; i ++ ) scanf( "%d" , &P[i] ) ; for (int i = 1 ; i <= n ; i ++ ) scanf( "%d" , &V[i] ) ; int wz = 0 , Minv = 0x7FFFFFFF ; for (int i = 1 ; i <= n ; i ++ ) { R[i] += R[i-1] ; if ( R[i] - i < Minv ) { Minv = R[i] - i ; wz = i ; } else if ( R[i] - i == Minv && B[i].size() > 0 ) wz = i ; } for (int i = wz % n + 1 ; ; i = (i % n) + 1 ) { for (int j = 0 ; j < (signed)B[i].size() ; j ++ ) { Q.insert( V[B[i][j]] ) ; } if ( *Q.rbegin() < P[i] ) Q.erase(Q.begin()) ; else { ans ++ ; Q.erase( Q.upper_bound( P[i] ) ) ; } if ( i % n + 1 == wz % n + 1 ) break ; } printf( "%d\n" , ans ) ; return 0 ;}
以上.
1 0
- 5015. 决斗
- 决斗
- jzoj 5015. 【NOI2017模拟3.15】决斗 贪心+平衡树
- 决斗 RQNOJ
- 剑客决斗
- 剑客决斗
- uva1636 决斗
- BZOJ4640 决斗
- 圆环决斗
- 决斗场
- 决斗场
- 决斗场
- 决斗场
- 决斗场
- 决斗场
- 决斗场
- 决斗场
- 决斗场
- API文档
- Select2练习
- H5拍照/图片上传js
- 【新品】1299起 小米平板3用联发科!19999元 小米要发“战斗机”?
- Objective-C self关键字
- 5015. 决斗
- JDK IO中的适配器模式和装饰者模式
- 【NOIP2013模拟联考15】人类基因组(genes)
- DNS
- 在页面中添加样式的方法 css
- 多表连接问题
- mysql的索引规约
- Objective-C(iOS)严格单例模式正确实现
- 关于maven以及ActiveMQ