定義s 為十進位制只由4 和7 組成的全體正整數的集合。
對於1 ≤ i ≤ n,給定ai。要求完成m 個操作:
add l r v 將i ∈ [l, r] 的所有ai 加上v
count l r 統計有多少i 滿足i ∈ [l, r] 且 ai ∈ s
第一行:兩個正整數n、m。
第二行:n 個正整數代表ai。
之後m 行:每行代表乙個操作。
對於每個count 操作輸出一行:乙個整數代表答案。
3 62 3 4
count 1 3
count 1 2
add 1 3 2
count 1 3
add 2 3 3
count 1 310
1150% 的資料滿足n,m ≤ 103
100% 的資料滿足1 ≤ n,m ≤ 105; 1 ≤ ai ≤ 104; 1 ≤ v ≤ 104
資料保證所有操作結束後ai ≤ 104。
這題就是分塊做法。
我們可以暴力列舉一下s集合,算一算也就30個數。
然後我們分塊然後對於每個塊維護乙個桶。
我們可以把問題轉化成區間內有多少個數屬於x(x屬於s)
每次統計答案的時候分30種情況討論即可。
上標:
#include
#include
#include
#include
#define n 100010
using namespace std;
int n,m,a[n]
,bl[n]
,st,le[
1010
],ri[
1010];
int sy[
1010
],t[
321]
[10010
],pl[
1010];
bool bz[
10010];
char ch;
inline
intread()
void
dfs(
int x)
void
update
(int x)
void
query
(int l,
int r)
update
(bl[l]);
for(
int i=l;i<=ri[bl[l]
];i++)if
(bz[a[i]
]) s++
;update
(bl[r]);
for(
int i=le[bl[r]
];i<=r;i++)if
(bz[a[i]
]) s++
;for
(int i=bl[l]+1
;i;i++
)for
(int j=
1;j<=sy[0]
;j++)if
(sy[j]
>pl[i]
) s+
=t[i]
[sy[j]
-pl[i]];
printf
("%d\n"
,s);
return;}
void
add(
int l,
int r,
int v)
return;}
for(
int i=l;i<=ri[bl[l]
];i++
)for
(int i=le[bl[r]
];i<=r;i++
)for
(int i=bl[l]+1
;i;i++
) pl[i]
+=v;
}int
main()
for(
int i=
1,l,r,v;i<=m;i++
)return0;
}
JZOJ4244 五校聯考6day2 yi
小明是 星際旅遊公司的員工,負責安排飛船,有n 艘飛船由他管理,每艘飛船能容納的人數都不同。今天小明被要求為乙個去銻星的旅遊團安排往返的飛船,旅遊團有m人,小明希望用最少的飛船完成任務。但不是所有的飛船都能用的,地球和銻星距離k镾 此單位由銻星人發明,後在星際旅遊業界廣泛使用 而每一艘飛船加滿燃料後...
JZOJ 4244 五校聯考6day2 yi
description 小明是 星際旅遊公司的員工,負責安排飛船,有n 艘飛船由他管理,每艘飛船能容納的人數都不同。今天小明被要求為乙個去銻星的旅遊團安排往返的飛船,旅遊團有m人,小明希望用最少的飛船完成任務。但不是所有的飛船都能用的,地球和銻星距離k镾 此單位由銻星人發明,後在星際旅遊業界廣泛使用...
JZOJ 4226 五校聯考3day2 A
傳送門 求按照規則使基地可以防禦敵人的入侵的至少要加的圍牆的條數 普通情況用s 2 s 2 s 2 s 2 s 2 s 2特殊地,我們需要對子環的情況進行判斷 include include include include include include include include includ...