求卡常,玄关(小号)
查看原帖
求卡常,玄关(小号)
1107997
chenxumin1017楼主2024/10/19 09:02
#include<bits/stdc++.h>
using namespace std;
// #pragma GCC optimize(2)
const int N = 3e5 + 5, M = 1e8 + 5;
int n, q, a[N], vis[N], tr[M], ls[M], rs[M], dcnt, vv[N];
long long ans;
int lowbit(int x){
  return x & -x;
}

void modify2(int l, int r, int id, int px, int x){
  if(l > r || l < 1 || r > n)return;
  if(l == r){
    tr[id] += x;
    return;
  }
  int mid = (l + r) >> 1;
  if(px <= mid){
    if(!ls[id])ls[id] = ++dcnt;
    modify2(l, mid, ls[id], px, x);
  }else{
    if(!rs[id])rs[id] = ++dcnt;
    modify2(mid + 1, r, rs[id], px, x);
  }
  tr[id] = tr[ls[id]] + tr[rs[id]];
}

int queryy2(int l, int r, int id, int pl, int pr){
  if(l > pr || r < pl || l > r || l < 1 || r > n || id == 0)return 0;
  if(l >= pl && r <= pr)return tr[id];
  int mid = (l + r) >> 1;
  return queryy2(l, mid, ls[id], pl, pr) + queryy2(mid + 1, r, rs[id], pl, pr);
}

void modify(int x, int y, int z){
  if(x > n)return;
  if(!vis[x])vis[x] = ++dcnt;
  modify2(1, n, vis[x], y, z);
  modify(x + lowbit(x), y, z);
}

int queryy(int x, int l, int r){
  if(x <= 0)return 0;
  return queryy(x - lowbit(x), l, r) + (vis[x] ? queryy2(1, n, vis[x], l, r) : 0);
}

int query(int x, int y, int x2, int y2){
  x2 = min(x2, n);
  x = max(x, 0);
  if(x > x2)return 0;
  return queryy(x2, y, y2) - queryy(x - 1, y, y2);
}

signed main(){
  //ios::sync_with_stdio(false), cin.tie(0), cout.tie(0);
  while(scanf("%d %d", &n, &q) == 2){
  
  fill(&tr[0], &tr[dcnt] + 1, 0);
  fill(&ls[0], &ls[dcnt] + 1, 0);
  fill(&rs[0], &rs[dcnt] + 1, 0);
  dcnt = 0;
  ans = 0;
  for(int i = 1; i <= n; i++){
    scanf("%d", &a[i]);
    vis[i] = 0;
    vv[a[i]] = i;
  }
  for(int i = 1; i <= n; i++){
    modify(a[i], i, 1);
    ans += query(a[i] + 1, 1, n, i - 1);
  }

  for(int i = 1, x, y; i <= q; i++){
    printf("%lld \n", ans);
    scanf("%d", &x);
    x = vv[x];
    ans -= query(a[x] + 1, 1, n, x - 1);
    ans -= query(1, x + 1, a[x] - 1, n);
    modify(a[x], x, -1);
  }
  }
  return 0;
}
2024/10/19 09:02
加载中...