开o2
by longlong2012 @ 2023-08-24 11:32:17
快读,O2优化
by jimmy9 @ 2023-08-24 11:44:32
### 都开了呀~ 怎么还是T了一个点???
![](https://cdn.luogu.com.cn/upload/image_hosting/yeluz48c.png)
```cpp
#include<bits/stdc++.h>
using namespace std;
const int maxn = 200005;
int N, R, Q, a[maxn][4], b[maxn][4]; //a[i][1]记录编号,a[i][2]记录实力值,a[i][3]记录分数
//快读
int read(){
int x=0,f=1;char ch=getchar();
while(ch<'0'||ch>'9') f=ch=='-'?-1:1,ch=getchar();
while(ch>='0'&&ch<='9') x=(x<<1)+(x<<3)+(ch^48),ch=getchar();
return x*f;
}
//快输
void print(int x){
char P[105];int w=0;
if(x<0) putchar('-'),x=-x;
while(x) P[++w]=x%10+'0',x/=10;
for(int i=w; i>=1; i--) putchar(P[i]);
}
void merge(int p, int q, int r) { //p开始位置,q中间位置,r结束位置,二路归并
int i, x, y;
x = p;
y = q + 1;
i = p;
while (x <= q && y <= r) {
if (a[x][3] > a[y][3]) {
b[i][1] = a[x][1];
b[i][2] = a[x][2];
b[i][3] = a[x][3];
x++;
i++;
} else if (a[x][3] == a[y][3]) {
if (a[x][1] < a[y][1]) {
b[i][1] = a[x][1];
b[i][2] = a[x][2];
b[i][3] = a[x][3];
x++;
i++;
} else {
b[i][1] = a[y][1];
b[i][2] = a[y][2];
b[i][3] = a[y][3];
y++;
i++;
}
} else {
b[i][1] = a[y][1];
b[i][2] = a[y][2];
b[i][3] = a[y][3];
y++;
i++;
}
}
while (x <= q) {
b[i][1] = a[x][1];
b[i][2] = a[x][2];
b[i][3] = a[x][3];
i++;
x++;
}
while (y <= r) {
b[i][1] = a[y][1];
b[i][2] = a[y][2];
b[i][3] = a[y][3];
i++;
y++;
}
for (int k = p; k <= r; k++) {
a[k][1] = b[k][1];
a[k][2] = b[k][2];
a[k][3] = b[k][3];
}
}
void merge_sort(int l, int r) {
if (l == r) return;
int mid = (l + r) / 2;
merge_sort(l, mid);
merge_sort(mid + 1, r);
merge(l, mid, r);
}
int main() {
N = read(), R = read(), Q = read();
for (int i = 1; i <= 2 * N; i++) { //输入编号和初始分数
a[i][1] = i;
a[i][3] = read();
}
for (int i = 1; i <= 2 * N; i++) { //输入实力值
a[i][2] = read();
}
while (R) {
memset(b, 0, sizeof(b));
merge_sort(1, 2 * N);
// printf("第%d轮比赛前\n",R);
// for(int i=1;i<=2*N;i++) cout<<i<<" 编号:"<<a[i][1]<<" 得分:"<<a[i][3]<<endl;
for (int i = 1; i <= 2 * N - 1; i += 2) {
if (a[i][2] > a[i + 1][2]) a[i][3]++;
else a[i + 1][3]++;
}
R--;
}
memset(b, 0, sizeof(b));
merge_sort(1, 2 * N);
print(a[Q][1]);
return 0;
}
```
by shengmin @ 2023-08-24 12:22:11