RT,蒟蒻实在是找不出哪里错了,求助
#include <bits/stdc++.h>
#define rep(i, f, t) for(int i(f); i <= t; ++i)
#define re(i, t) for(int i(1); i <= t; ++i)
#define per(i, t, f) for(int i(t); i >= f; --i)
#define pe(i, t) for(int i(t); i >= 1; --i)
#define ste(i, f, t, s) for(int i(f); i <= t; i += s)
#define ets(i, t, f, s) for(int i(t); i >= f; i -= s)
#define each(i, x) for(auto &i : (x))
#define nx(i, u) for(int i(head[u]); i; i = e[i].nxt)
typedef long long ll;
typedef long double lb;
typedef unsigned long long ull;
// #define int long long
using namespace std;
// typedef pair <double, int> pdi;
typedef pair <int, int> pii;
// typedef pair <string, bool> psb;
#define pb push_back
#define fi first
#define se second
#define ls(x) (x << 1)
#define rs(x) (x << 1 | 1)
#define ix(l, r) ((l + r) | (l != r))
#define mp(i, j) (make_pair(i, j))
#define inf 0x3f3f3f3f
#define INF 0x3f3f3f3f3f3f3f3f
#define exp 1e-7
namespace io {
char buf[1<<21], *p1 = buf, *p2 = buf, buf1[1<<21];
inline char gc () {return p1 == p2 && (p2 = (p1 = buf) + fread (buf, 1, 1 << 21, stdin), p1 == p2) ? EOF : *p1++;}
#ifndef ONLINE_JUDGE
#endif
template<class I>
inline void read(I &x) {
x = 0; I f = 1; char c = getchar();
while(c < '0' || c > '9') {if(c == '-') f = -1; c = getchar(); }
while(c >= '0' && c <= '9') {x = x * 10 + c - '0'; c = getchar(); }
x *= f;
}
template<class I>
inline void write(I x) {
if(x == 0) {putchar('0'); return;}
I tmp = x > 0 ? x : -x;
if(x < 0) putchar('-');
int cnt = 0;
while(tmp > 0) {
buf1[cnt++] = tmp % 10 + '0';
tmp /= 10;
}
while(cnt > 0) putchar(buf1[--cnt]);
}
#define in(x) read(x)
#define outn(x) write(x), putchar('\n')
#define out(x) write(x), putchar(' ')
} using namespace io;
int n, Q;
const int N = 5e5+3;
int a[N], b[N], base[N];
int al, ar;
int len[N];
struct Tree {
int l, r, siz;
}tr[N<<4];
int rt[N];
int cnt;
void pushup (int x) {
tr[x].siz = tr[tr[x].l].siz + tr[tr[x].r].siz;
}
void update (int &now, int pre, int l, int r, int k) {
now = ++cnt;
tr[now] = tr[pre];
if(l == r) {++tr[now].siz; return ;}
int m = (l + r) >> 1;
if(k <= m) update(tr[now].l, tr[pre].l, l, m, k);
if(k > m) update(tr[now].r, tr[pre].r, m+1, r, k);
pushup(now);
}
int query (int x, int l, int r, int dl, int dr) {
if(!x) return 0;
if(dl <= l && r <= dr) {
return tr[x].siz;
}
int m = (l + r) >> 1;
int res = 0;
if(dl <= m) res += query(tr[x].l, l, m, dl, dr);
if(dr > m) res += query(tr[x].r, m+1, r, dl, dr);
return res;
}
int ans[N], lst[N];
int qwq[N];
int st[N], s, id[N];
int main () {
freopen("stack.in", "r", stdin);
freopen("stack.out", "w", stdout);
in(n), in(Q);
re(i, n) in(a[i]), base[i] = a[i];
sort(base+1, base+n+1);
int siz = unique(base+1, base+n+1) - (base+1);
re(i, n) a[i] = lower_bound(base+1, base+siz+1, a[i]) - base;
re(i, n) in(b[i]), base[i] = b[i];
sort(base+1, base+n+1);
siz = unique(base+1, base+n+1) - (base+1);
re(i, n) b[i] = lower_bound(base+1, base+siz+1, b[i]) - base;
re(i, n) {
if(id[a[i]]) {
st[id[a[i]]] = 0;
}
while(s && b[st[s]] <= b[i]) id[a[st[s]]] = 0, --s;
if(!s) lst[i] = 1;
else lst[i] = st[s]+1;
st[++s] = i;
id[a[i]] = s;
}
re(i, n) {
update(rt[i], rt[i-1], 1, n, lst[i]);
}
re(i, Q) {
in(al), in(ar);
int ans = query(rt[ar], 1, n, 1, al) - query(rt[al-1], 1, n, 1, al);
outn(ans);
}
return 0;
}