NOIO TG T1 求助
  • 板块灌水区
  • 楼主MurataHimeko
  • 当前回复2
  • 已保存回复2
  • 发布时间2022/3/26 12:30
  • 上次更新2023/10/28 05:36:50
查看原帖
NOIO TG T1 求助
450290
MurataHimeko楼主2022/3/26 12:30

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;
}       
2022/3/26 12:30
加载中...