大佬们, 这个题n数据
1<=n<=50000 为什么我开到了5e4 + 5还是会发生段错误啊qwq~ 开到5e5 + 5 也不行 要5e6 + 5才可以qwq **
* Copyright(c)
* Author : tiketiskte
**/
#include <bits/stdc++.h>
#define IOS {ios::sync_with_stdio(false);cin.tie(0);}
#define ll long long
#define SZ(X) (int)X.size()
#define INF 0x3f3f3f3f
using namespace std;
const int maxn = 5e5 + 5;//这里辣~
struct node {
int id;
int value;
}sweet[maxn];
int T;
int n, m;
int c[maxn], d[maxn];
int main()
{
IOS
cin >> T;
while(T--) {
memset(d, 0, sizeof(d));
memset(c, 0, sizeof(c));
memset(sweet, 0, sizeof(sweet));
cin >> n >> m;
for(int i = 1; i <= n; i++) {
cin >> sweet[i].id >> sweet[i].value;
}
for(int i = 1; i <= m; i++) {
cin >> c[i];
d[1]++;
d[c[i] + 1]--;
}
for(int i = 1; i <= n; i++) {
d[i] = d[i - 1] + d[i];
sweet[i].value += d[i];
}
ll max1 = -INF, max2 = -INF;
ll ans = 0;
for(int i = n; i > 0; i--) {
if(sweet[i].id) {
max1 = max(max1, (ll)sweet[i].value);
if(sweet[i].value >= max2) {
ans++;
}
} else {
max2 = max(max2, (ll)sweet[i].value);
if(sweet[i].value >= max1) {
ans++;
}
}
}
cout << ans << endl;
}
system("pause");
return 0;
}
全部评论
(1) 回帖