QOJ.ac

QOJ

IDProblemSubmitterResultTimeMemoryLanguageFile sizeSubmit timeJudge time
#735852#6533. Traveling in Cells_xqy_RE 1678ms13412kbC++203.7kb2024-11-11 22:05:302024-11-11 22:05:30

Judging History

你现在查看的是最新测评结果

  • [2024-11-11 22:05:30]
  • 评测
  • 测评结果:RE
  • 用时:1678ms
  • 内存:13412kb
  • [2024-11-11 22:05:30]
  • 提交

answer

#include <bits/stdc++.h>
using LL = long long;
using namespace std;
constexpr int N = 1E6 + 5 , M = 1E8;

int cnt , rt[N] , ls[M + 5] , rs[M + 5] , sum[M  + 5];
void pushup(int u) {
	sum[u] = sum[ls[u]] + sum[rs[u]];
}
void update(int &u,int l,int r,int pos,int v) {
	if (u == 0) u = ++cnt;
	if (l == r) {
		sum[u] += v;
		return;
	}
	int md = (l + r) >> 1;
	if (pos <= md) update(ls[u] , l , md , pos , v);
	else update(rs[u] , md + 1 , r , pos , v);
	pushup(u);
}
int query(int u,int l,int r,int ql,int qr) {
	if (u == 0) return 0;
	if (l == ql && r == qr) {
		return sum[u];
	}
	int md = (l + r) >> 1;
	if (qr <= md) return query(ls[u] , l , md , ql , qr);
	else if (ql > md) return query(rs[u] , md + 1 , r , ql , qr);
	else {
		return query(ls[u] , l , md , ql , md) + query(rs[u] , md + 1 , r , md + 1 , qr);
	}
}
template<typename T>
struct Fenwick{
    int n;
    std::vector<T> tr;

    Fenwick(int n) : n(n), tr(n + 1, 0){}

    int lowbit(int x){
        return x & -x;
    }

    void modify(int x, T c){
        for(int i = x; i <= n; i += lowbit(i)) tr[i] += c;
    }

    void modify(int l, int r, T c){
        modify(l, c);
        if (r + 1 <= n) modify(r + 1, -c);
    }

    T query(int x){
        T res = T();
        for(int i = x; i; i -= lowbit(i)) res += tr[i];
        return res;
    }

    T query(int l, int r){
        return query(r) - query(l - 1);
    }

    int find_first(T sum){
        int ans = 0; T val = 0;
        for(int i = std::__lg(n); i >= 0; i--){
            if ((ans | (1 << i)) <= n && val + tr[ans | (1 << i)] < sum){
                ans |= 1 << i;
                val += tr[ans];
            }
        }
        return ans + 1;
    }

    int find_last(T sum){
        int ans = 0; T val = 0;
        for(int i = std::__lg(n); i >= 0; i--){
            if ((ans | (1 << i)) <= n && val + tr[ans | (1 << i)] <= sum){
                ans |= 1 << i;
                val += tr[ans];
            }
        }
        return ans;
    }

};
using BIT = Fenwick<LL>;

void clear() {
	for (int i = 1 ; i <= cnt ; ++i) {
		rt[i] = ls[i] = rs[i] = sum[i] = 0;
	}
	cnt = 0;
}
void solve() {

	clear();

	int n,q;
	cin >> n >> q;

	vector<int> c(n + 1) , v(n + 1);
	for (int i = 1 ; i <= n ; ++i) {
		cin >> c[i];
	}
	for (int i = 1 ; i <= n ; ++i) {
		cin >> v[i];
	}
	
	BIT tr(n);
	for (int i = 1 ; i <= n ; ++i) {
		tr.modify(i , v[i]);
	}
	for (int i = 1 ; i <= n ; ++i) {
		update(rt[c[i]] , 1 , n , i , 1);
	}
	
	for (int i = 1 ; i <= q ; ++i) {
		int opt;
		cin >> opt;
		if (opt == 1) {
			int p,x;
			cin >> p >> x;
			if (c[p] == x) continue;
			update(rt[c[p]] , 1 , n , p , -1);
			c[p] = x;
			update(rt[c[p]] , 1 , n , p , 1);
		} else if (opt == 2) {
			int p,x;
			cin >> p >> x;
			if (v[p] == x) continue;
			tr.modify(p , -v[p]);
			v[p] = x;
			tr.modify(p , v[p]);
		} else {

			int x,k;
			cin >> x >> k;
			vector<int> s(k);
			for (int j = 0 ; j < k ; ++j) {
				cin >> s[j];
			}
			auto check = [&] (int l,int r) {
				int sum = 0;
				for (int j = 0 ; j < k ; ++j) {
					sum += query(rt[s[j]] , 1 , n , l , r);
				}
				return (sum == r - l + 1);
			};

			int L , R , l = 1 , r = x;
			while (l < r) {
				int md = (l + r) >> 1;
				if (check(md , x)) r = md;
				else l = md + 1; 
			}
			L = r;
			
			l = x , r = n;
			while (l < r) {
				int md = (l + r + 1) >> 1;
				if (check(x , md)) l = md;
				else r = md - 1;
			}
			R = l;

			cout << tr.query(R) - tr.query(L - 1) << "\n";
		}
	}

}

int main() {

	ios::sync_with_stdio(false);
	cin.tie(nullptr);

	int t = 1;
	cin >> t;
	while (t--) {
		solve();
	}

	return 0;
}

Details

Tip: Click on the bar to expand more detailed information

Test #1:

score: 100
Accepted
time: 1ms
memory: 3796kb

input:

2
5 10
1 2 3 1 2
1 10 100 1000 10000
3 3 1 3
3 3 2 2 3
2 5 20000
2 3 200
3 3 2 1 3
3 3 3 1 2 3
1 3 4
2 1 100000
1 2 2
3 1 2 1 2
4 1
1 2 3 4
1000000 1000000 1000000 1000000
3 4 4 1 2 3 4

output:

100
110
1200
21211
100010
4000000

result:

ok 6 numbers

Test #2:

score: 0
Accepted
time: 194ms
memory: 3568kb

input:

20000
15 15
1 1 3 3 2 3 3 3 3 3 2 3 2 3 3
634593973 158136379 707704004 998369647 831633445 263092797 937841412 451774682 552617416 483763379 50360475 794662797 74247465 537217773 901809831
3 6 4 1 3 5 10
3 5 7 1 2 3 4 5 9 10
3 4 3 3 8 9
2 13 608033129
3 15 2 3 5
1 9 3
3 8 4 1 3 7 10
2 6 727472865
3...

output:

2689089686
8377825475
1706073651
1439027604
2689089686
792730352
8904867081
8904867081
8270273108
831633445
692051585
2782432626
697783016
883944422
184057757
287523250
184057757
696388752
184057757
1675459344
2667693025
2614711258
4006992373
1767091974
5348541057
5348541057
390631780
2290216252
942...

result:

ok 200062 numbers

Test #3:

score: 0
Accepted
time: 446ms
memory: 3888kb

input:

2000
150 150
8 3 8 8 8 6 8 4 2 7 6 8 8 5 8 7 7 8 5 6 8 8 6 8 8 8 8 7 8 6 6 8 8 8 6 2 3 4 8 8 7 8 5 8 2 6 8 7 8 8 6 8 6 8 3 8 8 8 8 4 7 8 7 3 7 6 7 5 5 8 6 8 8 6 3 8 6 7 6 8 8 7 4 8 6 7 8 7 7 7 7 8 8 8 8 2 5 2 8 8 6 7 6 3 8 8 7 8 8 8 6 6 8 6 6 7 5 8 8 8 7 8 7 7 6 8 8 8 8 8 8 6 5 7 5 5 8 7 8 7 7 7 6 5...

output:

4449391171
3290849667
852793841
5178673994
995994209
11431868919
4327723427
5071541023
3032743466
962345334
2997656427
4534278452
3851900075
3611231417
5071541023
1477584218
1299005818
1299005818
2145605244
854143763
886347565
2081234124
2333808475
2455955801
4179722063
2328504333
1473735464
4107685...

result:

ok 199987 numbers

Test #4:

score: 0
Accepted
time: 1545ms
memory: 8020kb

input:

10
30000 30000
3 4 2 4 4 4 4 3 4 3 4 3 4 3 4 4 2 4 4 4 4 4 3 3 3 4 3 4 3 4 3 3 4 2 4 3 3 3 3 4 3 4 4 4 4 2 3 3 4 2 3 4 4 4 4 1 4 4 4 4 4 4 4 4 3 3 3 4 4 4 4 4 2 3 4 4 4 4 3 4 4 3 3 3 4 4 3 4 4 2 3 4 4 4 4 3 2 4 3 4 3 2 4 4 3 4 2 2 4 4 4 4 2 4 3 2 4 4 3 4 4 4 2 4 4 3 2 3 2 3 3 3 4 2 4 3 4 1 4 3 4 4 4...

output:

6959437173
934970676
72461245502
8365928740
8384151048
984567228
12482909122
1904927816
15134139942
3759040688
92670874909
332468911
5936663371
3562978848
1300592004
10314009201
5581540905
131246926443
15087184135864
4077066271
1124704817
1520626740
4388174158
744377942
2770411457
6231852240
1508724...

result:

ok 200135 numbers

Test #5:

score: 0
Accepted
time: 1678ms
memory: 13412kb

input:

3
100000 100000
6 6 2 6 5 3 6 5 4 6 4 6 6 6 6 5 2 5 2 6 6 6 1 6 5 6 4 5 6 6 5 4 5 4 3 4 5 5 6 6 5 6 6 5 2 5 6 5 4 2 5 6 6 6 5 2 5 6 6 4 5 6 3 3 6 5 6 5 5 5 5 4 4 4 4 3 6 5 4 5 6 5 6 6 6 6 3 6 5 6 5 4 3 5 6 4 5 3 6 5 3 5 6 4 6 5 4 5 5 5 2 5 4 6 6 3 5 5 5 5 5 4 5 5 6 5 5 6 6 6 5 5 4 6 5 4 4 2 6 6 6 5 ...

output:

753014823
938372065
5655899645
168297301
14372254310
1066586326
3520855082
2591792266
2321844837
64378192092
250581310
1845085639
1402247975
198007248
2157074263
2743531397
3433471688
10332600792
1085086491
4845484125
50019185900042
4036199358
154762798
50019185900042
1221387905
11240790307
10537215...

result:

ok 199749 numbers

Test #6:

score: -100
Runtime Error

input:

3
100000 100000
173 276 418 362 183 321 401 316 193 426 212 126 206 409 382 443 405 412 259 233 356 355 340 41 354 447 421 464 436 436 329 239 427 415 452 424 174 294 220 413 293 456 140 304 438 462 418 345 160 296 443 234 455 452 396 347 438 413 235 416 363 186 340 285 340 457 392 359 451 310 431 1...

output:

832547880
1825993219
676042867
310750190
650714631
657481975
1279322
838513014
453432678
940357183
846050641
631145680
278723792
689448062
154699248
45678908
56518237
839298643
611124630
499104412
324172054
742064269
626600147
728123335
602272914
45485542
868574266
876207167
342300121
917221167
7055...

result: