带修莫队0分求调
查看原帖
带修莫队0分求调
448885
cancan1234楼主2022/1/18 11:11

RT,从去年10月开始学的时候一直断断续续调到现在,依然0分

顺便问一下带修莫队能不能和普通的莫队一样用奇偶优化

#include <bits/stdc++.h>
using namespace std;
inline long long read(){
	char ch = getchar() , fl = 1;
	while (ch > '9' || ch < '0'){
        if (ch == '-')fl = -1;
        ch = getchar();
	}
	long long p = 0;
	while (ch >= '0' && ch <= '9'){
		p = p * 10 + ch - '0';
		ch = getchar();
	}
	return fl * p;
}
struct ask{int l , r , ll , rr , t , st;}q[1000005];
struct rrr{int st , col;}ri[1000005];
inline bool cmp(ask a , ask b){
    if (a.ll == b.ll){
        if (a.rr == b.rr)return a.t < b.t;
        return a.rr < b.rr;
    }
    return a.ll < b.ll;
}
int a[1000005] , sum[1000005] , cnt , c1 , c2 , ans[1000005];
inline void add(int s){
    if (!sum[s])cnt++;
    sum[s]++;
}
inline void del(int s){
    sum[s]--;
    if (!sum[s])cnt--;
}
inline void change(int s , int l , int r){
    if (ri[s].st >= l && ri[s].st <= r){
        del(a[ri[s].st]);
        add(ri[s].col);
    }
    swap(ri[s].col , a[ri[s].st]);
}
signed main(){
    int n = read() , m = read() , k = pow(n , 2.0 / 3);
    for (int i = 1;i <= n;++i)a[i] = read();
    for (int i = 1;i <= m;++i){
        char c = getchar();
        while (c != 'Q' && c != 'R')c = getchar();
        if (c == 'Q'){
            q[++c1].l = read();
            q[c1].r = read();
            q[c1].ll = q[c1].l / k;
            q[c1].rr = q[c1].r / k;
            q[c1].st = c1;
            q[c1].t = c2;
        }else if (c == 'R'){
            ri[++c2].st = read();
            ri[c2].col = read();
        }
    }
    sort (q + 1 , q + c1 + 1 , cmp);
    int l = 1 , r = 0 , t = 0;
    for (int i = 1;i <= c1;++i){
        while (r < q[i].r)add(a[++r]);
        while (r > q[i].r)del(a[r--]);
        while (l < q[i].l)add(a[l++]);
        while (l > q[i].l)del(a[--l]);
        while (t < q[i].t)change(++t , l , r);
        while (t > q[i].t)change(t-- , l , r);
        ans[q[i].st] = cnt;
    }
    for (register int i = 1;i <= c1;++i)printf ("%d\n" , ans[i]);
	return 0;
}

2022/1/18 11:11
加载中...