题目链接:http://noi.openjudge.cn/ch0401/4363/

分析:如果直接模拟,时间复杂度是O(r*nlogn)超时

然后我们发现每次一轮开始时,刚开始是保序的,然后我们可以把所有赢得人拿出来,输的人也拿出来

发现赢得人还是保序的,输的人也是保序的,所以最终我们要干的就是把两个保序的序列合成一个保序的的序列

这样只需要排序一次,时间发杂度O(nlogn+r*n)可过

#include <iostream>
#include <string.h>
#include <algorithm>
#include <stdio.h>
#include <vector>
#include <math.h>
using namespace std;
typedef long long LL;
const int INF=0x3f3f3f3f;
const int N=2e5+;
int w[N],v[N],id[N];
int a[N>>],b[N>>];
bool cmp(int x,int y){
if(v[x]==v[y])return x>y;
return v[x]<v[y];
}
int main()
{
int n,r,q;
scanf("%d%d%d",&n,&r,&q);
n<<=;
for(int i=;i<=n;++i)
scanf("%d",&v[i]),id[i]=i;
for(int i=;i<=n;++i)
scanf("%d",&w[i]);
sort(id+,id++n,cmp);
for(int i=;i<=r;++i){
int cnt=;
for(int i=;i<=n;i+=){
if(w[id[i]]<w[id[i+]]){
--v[id[i]];
++cnt;
a[cnt]=id[i];
b[cnt]=id[i+];
}
else{
--v[id[i+]];
++cnt;
a[cnt]=id[i+];
b[cnt]=id[i];
}
}
int pos1=,pos2=,l=n/;
for(int i=;i<=n;++i){
if(pos1>l)id[i]=b[pos2++];
else if(pos2>l)id[i]=a[pos1++];
else{
if(v[a[pos1]]<v[b[pos2]])
id[i]=a[pos1++];
else if(v[a[pos1]]>v[b[pos2]])
id[i]=b[pos2++];
else{
if(a[pos1]<b[pos2])
id[i]=b[pos2++];
else
id[i]=a[pos1++];
}
}
}
}
printf("%d\n",id[n-q+]);
return ;
}

NOIP2011普及组 瑞士环 保序性的更多相关文章

  1. [NOIP2011普及组]瑞士轮 JAVA实现

    题目描述 2*N名编号为1~2N的选手共进行R轮比赛.每轮比赛开始前,以及所有比赛结束后,都会按照总分从高到低对选手进行一次排名.选手的总分为第一轮开始前的初始分数加上已参加过的所有比赛的得分和.总分 ...

  2. NOIP2011普及组 瑞士轮

    OJ地址: https://www.luogu.org/problemnew/show/P1309 http://bailian.openjudge.cn/practice/4031/ 总时间限制:  ...

  3. NOIP2011 普及组 T3 洛谷P1309 瑞士轮

    今天题做太少,放道小题凑数233 题目背景 在双人对决的竞技性比赛,如乒乓球.羽毛球.国际象棋中,最常见的赛制是淘汰赛和循环赛.前者的特点是比赛场数少,每场都紧张刺激,但偶然性较高.后者的特点是较为公 ...

  4. NOIP2011普及组 数字反转

    题目OJ链接: http://codevs.cn/problem/1130/ https://www.luogu.org/problemnew/show/P1307 2011年NOIP全国联赛普及组 ...

  5. 【单调队列】Vijos P1771 瑞士轮 (NOIP2011普及组第三题)

    题目链接: https://vijos.org/p/1771 题目大意: 给定2N个人(N<=100 000)和其初始分数.能力值(能力两两不同),比赛M次(M<=50),每次PK都是按分 ...

  6. 【解题报告】瑞士轮(NOIP2011普及组T3)

    [题外话:这道题吧……说实话我不太喜欢……因为卡快排.] 题目不贴了,就是给你一个赛制,然后各个选手的初始得分和能力值,问你进行R轮比赛之后第Q名的编号是多少(这个编号读进来就要算OYZ,初始快排的时 ...

  7. [NOIP2011] 普及组

    数字反转 小模拟 #include<cstdio> #include<iostream> #include<cstring> using namespace std ...

  8. noip2011普及组——统计单词数

    统计单词数 时间限制:1 s 内存限制:128MB [问题描述]一般的文本编辑器都有查找单词的功能,该功能可以快速定位特定单词在文章中的位置,有的还能统计出特定单词在文章中出现的次数.现在,请你编程实 ...

  9. noip2011普及组——数字反转

    数字反转 时间限制:1s 内存限制:128MB[问题描述]给定一个整数,请将该数各个位上数字反转得到一个新数.新数也应满足整数的常见形式,即除非给定的原数为零,否则反转后得到的新数的最高位数字不应为零 ...

随机推荐

  1. HDOJ(1001) Sum Problem

    这一套题做错了几次,按理说直接用等差数列求和公式就行了,主要是要考虑一些运算符的结核性问题: 四则运算符(+.-.*./)和求余运算符(%)结合性都是从左到右. 于是,我自己写了一个版本,主要是考虑( ...

  2. 解决ie8不兼容jquery trim问题

    /*为原形添加方法*/String.prototype.trimBoth = function() { return this.replace(/(^\s*)|(\s*$)/g, "&quo ...

  3. animation css3动画与CSS3 @keyframes担配使用创建往复平缓动画

    通过 @keyframes 规则,您能够创建动画. 创建动画的原理是,将一套 CSS 样式逐渐变化为另一套样式. 在动画过程中,您能够多次改变这套 CSS 样式. 以百分比来规定改变发生的时间,或者通 ...

  4. struts2 修改action的后缀

    struts2 修改action的后缀 struts2 的默认后缀是 .action 虽然很直观,但是很烦琐.很多人喜欢将请求的后缀改为 .do 在struts2中修改action后缀有两种比较简单的 ...

  5. jquery 里面的$(document).ready 和 DOMContentLoaded

    DOMContentLoaded 事件是当页面的初始dom tree加载好了就会执行. 而不会去等待外部的css 渲染完成和 js执行完成,即下图中的DOM Tree阶段 DOMContentLoad ...

  6. C语言字符知识狭区

    C语言字符在用户接口软件编程上经常用到,但是有一些狭区会让编程出现一些小BUG,现在总结与此. 1.'\\' 代表的是字符\,而'\'是不能代表字符\的.通常\后面都要跟上数字或者其他字母来表示一个特 ...

  7. jquery , find the event handler,找到jquery中的event handler

    找到 dispatch: function (e) { e = b.event.fix(e); var n, r, i, s, o, u = [], a = d.call(arguments), f ...

  8. javascript高级编程笔记02(基本概念)

    ParseInt()函数: 由于Number函数在转换字符串时比较复杂而且不合理,我们常常转换字符串都用parseInt函数, Parseint函数规则: 忽略字符串前面的空格,直到找到第一个非空格字 ...

  9. 软媒魔方u盘装系统

    http://jingyan.baidu.com/article/d5a880eb6e747e13f147ccd6.html

  10. Unity3d与android通信

    原地址:http://www.cnblogs.com/alongu3d/p/3661077.html unity3d与android的通信,从网上搜索了一些文章,发现我的始终不成功!后来调试通了,现在 ...