#include <bits/stdc++.h>
#include<ext/pb_ds/tree_policy.hpp>
#include<ext/pb_ds/assoc_container.hpp>
#define y1 theboatman
#define make_struct(args...) {args}
using namespace std;
using namespace __gnu_pbds;
typedef long long ll;
template <typename T> using ordset = tree <T, null_type, less<T>, rb_tree_tag, tree_order_statistics_node_update>;
const long long INF = 1e18 + 10;
const int inf = 1e9 + 10;
const int N = 1e6 + 10;
struct Tree {
int n, timer;
vector <ordset <pair <int, int> > > t;
void init(int _n) {
n = _n;
timer = 0;
t.resize(n + 1);
}
void add(int pos, int val) {
for(int i = pos; i <= n; i += i & -i) {
t[i].insert({val, timer++});
}
}
void del(int pos, int val) {
for(int i = pos; i <= n; i += i & -i) {
t[i].erase(t[i].lower_bound({val, -inf}));
}
}
int get(int pos, int r) {
int ans = 0;
for(int i = pos; i > 0; i -= i & -i) {
ans += t[i].size() - t[i].order_of_key({r + 1, -inf});
}
return ans;
}
};
void brute() {
int n, m;
cin >> n >> m;
vector <int> a(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
}
while(m--) {
int type;
cin >> type;
if (type == 1) {
int pos, val;
cin >> pos >> val;
pos--;
a[pos] = val;
}
else {
int x;
cin >> x;
int ans = 0;
for(auto i : a) {
if (i == x) {
ans++;
}
}
for(int i = 1; i < n; i++) {
int l = min(a[i], a[i - 1]);
int r = max(a[i], a[i - 1]);
if (l < x && x < r) {
ans++;
}
}
cout << ans << "\n";
}
}
}
int main() {
freopen("game.in", "r", stdin);
freopen("game.out", "w", stdout);
cin.tie(0);
ios::sync_with_stdio(0);
int n, m;
cin >> n >> m;
vector <int> a(n);
for(int i = 0; i < n; i++) {
cin >> a[i];
}
Tree osu;
osu.init(N);
for(int i = 1; i < n; i++) {
osu.add(min(a[i], a[i - 1]), max(a[i], a[i - 1]));
}
vector <int> cnt(N);
for(int i = 0; i < n; i++) {
cnt[a[i]]++;
}
for(int iq = 0; iq < m; iq++) {
int type;
cin >> type;
if (type == 2) {
int x;
cin >> x;
cout << cnt[x] + osu.get(x - 1, x) << "\n";
}
else {
int pos, val;
cin >> pos >> val;
pos--;
if (pos > 0) {
osu.del(min(a[pos], a[pos - 1]), max(a[pos], a[pos - 1]));
}
if (pos < n - 1) {
osu.del(min(a[pos], a[pos + 1]), max(a[pos], a[pos + 1]));
}
cnt[a[pos]]--;
a[pos] = val;
cnt[a[pos]]++;
if (pos > 0) {
osu.add(min(a[pos], a[pos - 1]), max(a[pos], a[pos - 1]));
}
if (pos < n - 1) {
osu.add(min(a[pos], a[pos + 1]), max(a[pos], a[pos + 1]));
}
}
}
return 0;
}
/*
*/
Compilation message
game.cpp: In function 'int main()':
game.cpp:98:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
freopen("game.in", "r", stdin);
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~
game.cpp:99:12: warning: ignoring return value of 'FILE* freopen(const char*, const char*, FILE*)', declared with attribute warn_unused_result [-Wunused-result]
freopen("game.out", "w", stdout);
~~~~~~~^~~~~~~~~~~~~~~~~~~~~~~~~
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
235 ms |
198940 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
235 ms |
198940 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |
# |
결과 |
실행 시간 |
메모리 |
Grader output |
1 |
Runtime error |
235 ms |
198940 KB |
Execution killed with signal 11 (could be triggered by violating memory limits) |
2 |
Halted |
0 ms |
0 KB |
- |