#include <bits/stdc++.h>
using namespace std;
struct Change {
int i, v;
};
struct Comparator {
vector<int> &A;
vector<Change> &C;
int step;
vector< vector<int> > S;
Comparator(vector<int> &_A, vector<Change> &_C): A(_A), C(_C) {
int n = A.size();
int m = C.size() + 1;
int instances = 300000000 / 4 / n - 1;
step = max(1, m / instances);
instances = (m + step - 1) / step;
S.reserve(instances);
vector<int> T(A);
for(int i = 0; i < m - 1; i++) {
if(i % step == 0) S.push_back(T);
T[C[i].i] = C[i].v;
}
}
int cmp(int p, int q) const {
if(p == q) return 0;
if(p > q) return -cmp(q, p);
int s0 = p / step;
int i0 = s0 * step;
vector<int> P(S[s0]);
for(int i = i0; i < p; i++) P[C[i].i] = C[i].v;
vector<int> Q(P);
set<int> ch;
for(int i = p; i < q; i++) {
Q[C[i].i] = C[i].v;
ch.insert(C[i].i);
}
for(set<int>::const_iterator it = ch.begin(); it != ch.end(); it++) {
if(P[*it] != Q[*it]) return (P[*it] < Q[*it] ? -1 : 1);
}
return 0;
}
bool operator()(int p, int q) const {
return cmp(p, q) < 0;
}
};
int main() {
ios_base::sync_with_stdio(false);
cin.tie(NULL);
int n, m;
cin >> n >> m;
vector<int> A(n);
for(int i = 0; i < n; i++) cin >> A[i];
vector<Change> C(m-1);
for(int i = 0; i < m-1; i++) {
cin >> C[i].i >> C[i].v;
C[i].i--;
}
Comparator cmp(A, C);
vector<int> Z(m);
for(int i = 0; i < m; i++) Z[i] = i;
sort(Z.begin(), Z.end(), cmp);
for(int i = 0; i < m; i++) cout << Z[i] + 1 << ' ';
cout << '\n';
return 0;
}
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 | #include <bits/stdc++.h> using namespace std; struct Change { int i, v; }; struct Comparator { vector<int> &A; vector<Change> &C; int step; vector< vector<int> > S; Comparator(vector<int> &_A, vector<Change> &_C): A(_A), C(_C) { int n = A.size(); int m = C.size() + 1; int instances = 300000000 / 4 / n - 1; step = max(1, m / instances); instances = (m + step - 1) / step; S.reserve(instances); vector<int> T(A); for(int i = 0; i < m - 1; i++) { if(i % step == 0) S.push_back(T); T[C[i].i] = C[i].v; } } int cmp(int p, int q) const { if(p == q) return 0; if(p > q) return -cmp(q, p); int s0 = p / step; int i0 = s0 * step; vector<int> P(S[s0]); for(int i = i0; i < p; i++) P[C[i].i] = C[i].v; vector<int> Q(P); set<int> ch; for(int i = p; i < q; i++) { Q[C[i].i] = C[i].v; ch.insert(C[i].i); } for(set<int>::const_iterator it = ch.begin(); it != ch.end(); it++) { if(P[*it] != Q[*it]) return (P[*it] < Q[*it] ? -1 : 1); } return 0; } bool operator()(int p, int q) const { return cmp(p, q) < 0; } }; int main() { ios_base::sync_with_stdio(false); cin.tie(NULL); int n, m; cin >> n >> m; vector<int> A(n); for(int i = 0; i < n; i++) cin >> A[i]; vector<Change> C(m-1); for(int i = 0; i < m-1; i++) { cin >> C[i].i >> C[i].v; C[i].i--; } Comparator cmp(A, C); vector<int> Z(m); for(int i = 0; i < m; i++) Z[i] = i; sort(Z.begin(), Z.end(), cmp); for(int i = 0; i < m; i++) cout << Z[i] + 1 << ' '; cout << '\n'; return 0; } |
English