UOJ Logo

NOI.AC

ID题目提交者结果用时内存语言文件大小提交时间测评时间
#200094#2971. Data StructuresAnonyme10012383ms43980kbC++112.9kb2023-12-28 09:17:452023-12-28 13:54:50

answer

#include<bits/stdc++.h>
using namespace std;

#define QwQ330AwA return 0
#define ll long long

const int N = 2e5 + 5;
int n, m;

struct Segment {
	struct Tree {
		ll f;
		int mn;
	} t[N << 2];
	int w[N];
	int val[N];
	int cnt[N];
	#define ls (p << 1)
	#define rs ((p << 1) | 1)
	ll up(int p, int l, int r, int x) {
		if (l == r) return t[p].mn < x ? val[l] : 0;
		int mid = (l + r) / 2;
		if (t[rs].mn >= x) return up(ls, l, mid, x);
		else return up(rs, mid + 1, r, x) + t[p].f - t[rs].f;
	} 
	void build(int p, int l, int r) {
		if (l == r) {
			t[p].f = t[p].mn = 1e9;
			return ;
		}
		int mid = (l + r) / 2;
		build(ls, l, mid);
		build(rs, mid + 1, r);
		t[p].mn = 1e9;
		t[p].f = 1e9;
	}
	void upd(int p, int l, int r, int x, int v) {
		if (l == r) {
			//cout << x << ' ' << w[x] << endl;
			cnt[l] += v;
			if (cnt[l] == 0) t[p].mn = 1e9, t[p].f = 1e9;
			else t[p].mn = w[l], t[p].f = val[l];
			return ;
		}
		int mid = (l + r) / 2;
		if (x <= mid) upd(ls, l, mid, x, v);
		else upd(rs, mid + 1, r, x, v);
		t[p].mn = min(t[ls].mn, t[rs].mn);
		t[p].f = t[rs].f + up(ls, l, mid, t[rs].mn);
	}
	int mn;
	ll ans;
	void query(int p, int l, int r, int L, int R) {
		if (L <= l && r <= R) {
		//	cout << l << ' ' << r << ' ' << t[p].mn << ' ' << mn << endl;			 
			ans += up(p, l, r, mn);
			mn = min(mn, t[p].mn);
			return ;
		}
		int mid = (l + r) / 2;
		if (mid < R) query(rs, mid + 1, r, L, R);
		if (L <= mid) query(ls, l, mid, L, R);
	}
	ll query(int l, int r, int v) {
		mn = v;
		ans = 0;
		query(1, 1, m, l, r);
		return ans;
	}
} t[2];
int mp[N], tot;
struct Upd {
	int op, l, r, w;
} q[N];
vector < pair <int, int> > ask[N], add[N];
ll ans[N];

signed main() {
	ios::sync_with_stdio(0);
	cin.tie(0);
	cin >> n >> m;
	for (int i = 1; i <= m; i++) {
		cin >> q[i].op;
		if (q[i].op == 1) cin >> q[i].l >> q[i].r >> q[i].w, mp[++tot] = q[i].w;
		else cin >> q[i].l >> q[i].w, mp[++tot] = q[i].w;
	}
	sort(mp + 1, mp + tot + 1);
	for (int i = 1; i <= m; i++) {
		int v = lower_bound(mp + 1, mp + tot + 1, q[i].w) - mp;
		//cout << v << endl;
		t[0].w[v] = i;
		t[1].w[m - v + 1] = i;
		t[0].val[v] = mp[v];
		t[1].val[m - v + 1] = mp[v];		
		if (q[i].op == 1) add[q[i].l].push_back({v, 1}), add[q[i].r + 1].push_back({v, -1});
		else ask[q[i].l].push_back({v, i});
	}
	t[0].build(1, 1, m);
	t[1].build(1, 1, m);
	for (int i = 1; i <= n; i++) {
		for (auto qwq : add[i]) {
			int x = qwq.first, w = qwq.second;
			t[0].upd(1, 1, m, x, w);
			t[1].upd(1, 1, m, m - x + 1, w);
		}
		for (auto qwq : ask[i]) {
			int x = qwq.first, id = qwq.second;
			ans[id] = t[0].query(1, x, id) + t[1].query(1, m - x + 1, id);
		}
	}
	for (int i = 1; i <= m; i++) if (q[i].op == 2) cout << ans[i] << '\n';
	QwQ330AwA;
}

/*
按序列扫,时间轴上前缀LIS+后缀LDS  
说错了,值域上对时间的后缀严格最小值+前缀严格最小值
楼房重建。
*/

详细

小提示:点击横条可展开更详细的信息

Subtask #1:

score: 20
Accepted

Test #1:

score: 20
Accepted
time: 6ms
memory: 10760kb

input:

100 100
1 74 90 483277092
1 6 64 330012598
2 70 375491398
2 3 239331851
1 18 20 198961154
1 2 14 360...

output:

0
0
330012598
330012598
483277092
1170065597
1170065597
452459391
1170065597
1170065597
330012598
11...

result:

ok 50 tokens

Test #2:

score: 0
Accepted
time: 4ms
memory: 10760kb

input:

100 100
2 38 721170327
2 42 314679620
1 17 20 906715450
1 16 18 103685864
1 5 96 531920691
2 62 7193...

output:

0
0
531920691
531920691
0
623958040
973681345
531920691
2357530551
1388337284
708185968
1271316206
0...

result:

ok 52 tokens

Test #3:

score: 0
Accepted
time: 9ms
memory: 10756kb

input:

100 100
2 17 45024293
2 3 19392088
1 96 100 648840256
1 46 70 35681425
1 45 87 187169568
2 94 109739...

output:

0
0
0
0
978692719
919455588
1377376203
2465293292
2265626167
1035202805
1110618328
818598426
1297206...

result:

ok 48 tokens

Test #4:

score: 0
Accepted
time: 0ms
memory: 10756kb

input:

100 100
2 87 323450795
1 42 97 623119662
1 80 83 894980421
1 53 75 670299890
1 11 26 26825515
2 83 8...

output:

0
1518100083
623119662
0
1157951550
0
623119662
534831888
1157951550
1878163059
1518100083
315205393...

result:

ok 56 tokens

Test #5:

score: 0
Accepted
time: 3ms
memory: 10760kb

input:

100 100
2 47 68082284
2 99 223185769
1 16 48 444492824
1 64 90 917611375
2 84 375691808
2 64 3345699...

output:

0
0
917611375
917611375
444492824
0
0
1207226581
1688280575
1639910482
2615378266
2169993620
8723019...

result:

ok 45 tokens

Subtask #2:

score: 20
Accepted

Test #6:

score: 20
Accepted
time: 31ms
memory: 12612kb

input:

10000 10000
1 8460 9508 1042674
2 204 1328470
2 4860 1477926
1 1961 6635 5141459
1 292 9067 5267113
...

output:

0
0
16975126
0
16975126
46997719
55063030
30931075
141846833
187780293
107682628
65919930
129095749
...

result:

ok 5061 tokens

Test #7:

score: 0
Accepted
time: 24ms
memory: 12612kb

input:

10000 10000
2 9276 1881281
2 5322 3531150
1 3474 7784 3904754
1 4025 9797 5745728
2 3310 5778070
2 9...

output:

0
0
0
0
9650482
9650482
27265670
24319025
117700363
43810928
71463595
43810928
92059219
117700363
39...

result:

ok 4982 tokens

Test #8:

score: 0
Accepted
time: 24ms
memory: 12612kb

input:

10000 10000
1 7383 9485 1846686
1 6986 9000 3184237
1 6839 9474 3516133
2 5148 3717473
1 7066 7667 3...

output:

0
0
5358212
17991259
17991259
0
13905268
4419405
32150597
0
44189118
79838849
82565267
217354756
933...

result:

ok 4992 tokens

Test #9:

score: 0
Accepted
time: 25ms
memory: 12616kb

input:

10000 10000
1 2803 7704 540025
2 4610 1030057
1 2065 5803 1974469
2 8107 2382419
1 3752 6865 2402237...

output:

540025
0
540025
5786332
0
2942262
0
10313728
11183329
31387558
48212163
94546697
83334040
25609491
1...

result:

ok 4980 tokens

Test #10:

score: 0
Accepted
time: 25ms
memory: 12616kb

input:

10000 10000
2 4007 2344559
1 4801 5990 2711187
2 8737 2835780
2 2210 5532123
1 2092 7314 6032600
2 4...

output:

0
0
0
8743787
29668701
32433292
62284718
82336753
42554160
0
67910385
67910385
58116260
87640943
952...

result:

ok 5044 tokens

Subtask #3:

score: 20
Accepted

Test #11:

score: 20
Accepted
time: 685ms
memory: 39644kb

input:

1 200000
2 1 40842
1 1 1 57146
1 1 1 74327
1 1 1 138180
1 1 1 177068
2 1 180805
2 1 276156
2 1 33092...

output:

0
446721
446721
446721
1480698
2182571
3785502
5743088
6732312
6732312
7842367
7842367
9087781
13559...

result:

ok 99938 tokens

Test #12:

score: 0
Accepted
time: 479ms
memory: 39644kb

input:

1 200000
2 1 14695
1 1 1 91996
2 1 197342
2 1 209397
1 1 1 218041
2 1 222383
1 1 1 331372
1 1 1 3719...

output:

0
91996
91996
310037
2652430
4199940
4199940
5196219
5196219
5196219
5196219
6305707
7450858
8629376...

result:

ok 100213 tokens

Test #13:

score: 0
Accepted
time: 452ms
memory: 39772kb

input:

1 200000
2 1 81308
1 1 1 115557
1 1 1 133079
1 1 1 206859
1 1 1 209169
1 1 1 209243
2 1 343492
2 1 3...

output:

0
873907
873907
1308359
2375334
3548289
6446764
6446764
8544811
11175750
12524920
15566603
17312932
...

result:

ok 99797 tokens

Test #14:

score: 0
Accepted
time: 462ms
memory: 39772kb

input:

1 200000
1 1 1 5294
2 1 27574
2 1 94906
2 1 98049
2 1 117160
1 1 1 193359
2 1 268969
2 1 270447
1 1 ...

output:

5294
5294
5294
5294
198653
198653
487702
972886
1988924
3151302
3824357
3824357
3824357
3824357
4717...

result:

ok 100256 tokens

Test #15:

score: 0
Accepted
time: 445ms
memory: 39652kb

input:

1 200000
1 1 1 9016
2 1 18991
2 1 41928
2 1 186232
2 1 240758
2 1 273018
2 1 322344
1 1 1 493982
2 1...

output:

9016
9016
9016
9016
9016
9016
502998
502998
502998
1172545
2743351
3794251
5131905
10895821
10895821...

result:

ok 99462 tokens

Subtask #4:

score: 40
Accepted

Test #16:

score: 40
Accepted
time: 927ms
memory: 43972kb

input:

200000 200000
1 107780 117993 103094
1 179791 196040 246953
2 85096 289072
2 17740 322258
2 187527 3...

output:

0
0
246953
0
0
1485187
515251
2121732
1660509
3468284
515251
2284006
2738834
669156
1212171
2784416
...

result:

ok 99930 tokens

Test #17:

score: 0
Accepted
time: 941ms
memory: 43972kb

input:

200000 200000
2 61611 6932
2 59217 12983
2 105294 64747
1 15480 77889 72594
1 96995 190511 108852
2 ...

output:

0
0
0
0
72594
2001882
2998751
1805577
3679187
3430969
2799749
3679187
0
2698669
4853972
4488193
5001...

result:

ok 100045 tokens

Test #18:

score: 0
Accepted
time: 961ms
memory: 43972kb

input:

200000 200000
1 133996 147075 160552
1 148088 195393 200566
1 9615 64555 201794
2 30832 205480
2 991...

output:

201794
0
0
911991
1355532
1255747
1255747
1010964
200566
1687535
3694257
5282151
4502891
5576846
716...

result:

ok 99988 tokens

Test #19:

score: 0
Accepted
time: 978ms
memory: 43972kb

input:

200000 200000
2 154796 42108
1 36524 174159 54445
1 69388 105116 184813
2 58487 189566
1 117123 1463...

output:

0
54445
0
54445
745969
429630
473047
0
0
686758
3765087
7796607
632313
3232670
1479840
2295634
63883...

result:

ok 100043 tokens

Test #20:

score: 0
Accepted
time: 975ms
memory: 43976kb

input:

200000 200000
1 19488 155203 65091
2 144360 68200
1 69369 91361 250910
2 98152 271112
1 82787 88341 ...

output:

65091
65091
381705
302578
1136734
1478473
65091
1165770
1526865
966372
1282986
1787105
2584792
0
339...

result:

ok 99971 tokens

Test #21:

score: 0
Accepted
time: 1000ms
memory: 43980kb

input:

200000 200000
2 21004 21108
2 149922 41746
1 71065 92233 254932
1 65670 118525 255309
2 28596 312959...

output:

0
0
0
590168
0
590168
0
0
4357395
3286714
0
8673905
4851545
2010137
11919939
3249767
3249767
2010137...

result:

ok 99620 tokens

Test #22:

score: 0
Accepted
time: 999ms
memory: 43976kb

input:

200000 200000
1 17310 182659 80879
1 158593 174783 137971
2 130711 272938
1 95591 138317 310746
2 19...

output:

80879
0
0
80879
1637682
2323580
3975810
2984419
0
841400
3712547
5342785
5302016
3712547
6228153
534...

result:

ok 99922 tokens

Test #23:

score: 0
Accepted
time: 975ms
memory: 43976kb

input:

200000 200000
1 66124 113202 4372
1 125849 196977 13845
1 4154 196504 16448
2 37622 16883
2 117907 2...

output:

16448
16448
57148
30293
241646
57148
57148
416160
30293
797632
2820057
0
3247453
2711429
1119391
409...

result:

ok 100038 tokens

Test #24:

score: 0
Accepted
time: 973ms
memory: 43980kb

input:

200000 200000
1 57732 119230 44105
2 34723 69424
2 97889 77378
1 86037 106595 83080
2 138728 115455
...

output:

0
44105
0
279916
364073
568490
622792
1070453
1216230
0
2428740
2428740
3868088
7329504
5667690
5525...

result:

ok 100261 tokens

Test #25:

score: 0
Accepted
time: 980ms
memory: 43976kb

input:

200000 200000
1 98347 174586 15205
1 45796 190762 31539
1 129944 151749 122497
2 191063 230555
2 118...

output:

0
46744
664569
1670304
1149984
2017313
2925669
1670304
0
0
4835451
0
0
1361064
4712954
1361064
10548...

result:

ok 99728 tokens

Extra Test:

score: 0
Extra Test Passed