社区讨论

样例不过求调

P1972[SDOI2009] HH 的项链参与者 5已保存回复 22

讨论操作

快速查看讨论及其快照的属性,并进行相关操作。

当前回复
22 条
当前快照
1 份
快照标识符
@mhjlbiju
此快照首次捕获于
2025/11/04 04:26
4 个月前
此快照最后确认于
2025/11/04 06:32
4 个月前
查看原帖
CPP
#include<bits/stdc++.h>
using namespace std;
struct node {
    int l, r, id;
}mo[1000005];
int a[1000005], b[1000005], c, n, m, B, ll, rr, l = 1, r;
int ans[1000005];
bool cmp(node a, node b) {
    if((a.l - 1) / B == (b.l - 1) / B) return a.r < b.r;
    return a.l < b.l; 
}
void add(int x) {
    if(b[a[x]] == 0) {
        c ++;
    }
    b[a[x]] ++;
}
void del(int x) {
    if(b[a[x]] == 1) {
        c --;
    }
    b[a[x]] --;
}
signed main() {
    cin >> n;
    B = sqrt(n);
    for(int i = 1;i <= n;i ++) {
        cin >> a[i];
    }
    cin >> m;
    for(int i = 1;i <= m;i ++) {
        cin >> mo[i].l >> mo[i].r;
        mo[i].id = i;
    }
    sort(mo + 1, mo + m + 1, cmp);
    for(int i = 1;i<= m;i++) {
        ll = mo[i].l;
        rr = mo[i].r;
        while(l < ll) {
            l ++;
            del(l - 1);
        }
        while(r < rr) {
            r ++;
            add(r);
        }
        while(l > ll) {
            l --;
            add(l);
        }
        while(r > rr) {
            r --;
            del(r + 1);
        }
        ans[mo[i].id] = c;
    }
    for(int i = 1;i<= m;i ++) {
        cout << a[i] << endl;
    }
}

回复

22 条回复,欢迎继续交流。

正在加载回复...