双倍经验过来的,但是RE?
查看原帖
双倍经验过来的,但是RE?
743373
Vitamin_B楼主2024/8/9 20:31

返回信息:SIGFPE。代码两份(均P1533能正常运行但这题RE):

//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

# include <bits/stdc++.h>

# define I return

# define AK 0

# define IOI ;

using namespace std;

typedef long long ll;

typedef pair <int, int> pii;

struct node {

	int l, r, k, id, pie;

	bool operator < (const node& x) const {

		return pie != x.pie ? pie < x.pie : pie & 1 ? r > x.r : r < x.r;

	}

} q[5005];

int n, m, len, a[100005], ans[5005], l = 1, r;

vector <int> v;

void insert (const int x) {
//	cerr << "add " << x << '\n';
	v.insert (lower_bound (v.begin (), v.end (), a[x]), a[x]);

	return ;

}

void del (const int x) {
//	cerr << "del " << x << '\n';
	auto it = find (v.begin (), v.end (), a[x]);

	if (it != v.end ())
		v.erase (it);

	return ;

}

int main () {

	ios::sync_with_stdio (0);

	cin.tie (0);

	cout.tie (0);

	cin >> n >> m;

	for (int i = 1; i <= n; ++ i)
		cin >> a[i];

	len = n / sqrt (m);

	for (int i = 0; i < m; ++ i)
		cin >> q[i].l >> q[i].r >> q[i].k, -- q[i].k, q[i].id = i, q[i].pie = q[i].l / len;

	sort (q, q + m);
//	cerr << "Pretest Passed\n";
	for (int i = 0; i < m; ++ i) {
//		cerr << q[i].id << ":\nl-\n";
		while (l > q[i].l)
			insert (-- l);
//		cerr << "r+\n";
		while (r < q[i].r)
			insert (++ r);
//		cerr << "l+\n";
		while (l < q[i].l)
			del (l), ++ l;
//		cerr << "r-\n";
		while (r > q[i].r)
			del (r), -- r;
//		cerr << q[i].id << ':' << v.size () << '\n';
		ans[q[i].id] = v[q[i].k];

	}

	for (int i = 0; i < m; ++ i)
		cout << ans[i] << '\n';

	I AK IOI

}

//# pragma GCC optimize("Ofast,no-stack-protector")
//
//# pragma GCC target("sse,sse2,sse3,ssse3,sse4,popcnt,abm,mmx,avx,tune=native")

# include <bits/stdc++.h>

# include <ext/pb_ds/assoc_container.hpp>

# define I return

# define AK 0

# define IOI ;

using namespace std;
using namespace __gnu_pbds;
typedef long long ll;

typedef pair <int, int> pii;

struct node {

	int l, r, k, id, pie;

	bool operator < (const node& x) const {

		return pie != x.pie ? pie < x.pie : pie & 1 ? r > x.r : r < x.r;

	}

} q[50005];

int n, m, len, a[300005], ans[50005], l = 1, r;

tree<int, null_type, less<int>, rb_tree_tag, tree_order_statistics_node_update> v;

void insert (const int x) {
//	cerr << "add " << x << '\n';
	v.insert (a[x]);

	return ;

}

void del (const int x) {
//	cerr << "del " << x << '\n';
	v.erase (a[x]);

	return ;

}

int main () {

	ios::sync_with_stdio (0);

	cin.tie (0);

	cout.tie (0);

	cin >> n >> m;

	for (int i = 1; i <= n; ++ i)
		cin >> a[i];

	len = n / sqrt (m);

	for (int i = 0; i < m; ++ i)
		cin >> q[i].l >> q[i].r >> q[i].k, -- q[i].k, q[i].id = i, q[i].pie = q[i].l / len;

	sort (q, q + m);
//	cerr << "Pretest Passed\n";
	for (int i = 0; i < m; ++ i) {
//		cerr << q[i].id << ":\nl-\n";
		while (l > q[i].l)
			insert (-- l);
//		cerr << "r+\n";
		while (r < q[i].r)
			insert (++ r);
//		cerr << "l+\n";
		while (l < q[i].l)
			del (l), ++ l;
//		cerr << "r-\n";
		while (r > q[i].r)
			del (r), -- r;
//		cerr << q[i].id << ':' << v.size () << '\n';
		ans[q[i].id] = *v.find_by_order (q[i].k);

	}

	for (int i = 0; i < m; ++ i)
		cout << ans[i] << '\n';

	I AK IOI

}
2024/8/9 20:31
加载中...