Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <vector>
- using namespace std;
- struct Set {
- vector<int> a;
- Set(int n) : a(n, 0) {}
- int mark(int index) {
- for (int i = index; i < (int)a.size(); i |= i+1)
- a[i]++;
- }
- int countDown(int index) {
- int s = 0;
- for (int i = index; i >= 0; i &= i+1, --i)
- s += a[i];
- return s;
- }
- };
- int main() {
- // freopen("in.txt", "r", stdin);
- // freopen("out.txt", "w", stdout);
- int N, M;
- scanf("%d %d", &N, &M);
- vector<int> pos (N+1, 0);
- Set set(N+M);
- for (int i = 1; i <= N; ++i)
- pos[i] = M+i-1;
- for (int i = 0, s = M-1, q; i < M; ++i) {
- scanf("%d", &q);
- printf("%d ", pos[q]-set.countDown(pos[q])-s);
- set.mark(pos[q]);
- pos[q] = s--;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement