看著蟲蟲重寫的鐵路購票系統使用非常方便,xyiyy
想要蟲蟲幫忙實現乙個雞排銷售情況查詢的系統,主要是針對
xx路上銷售情況的查詢。已知在
xx路上,從東往西共有
n個住戶,標號分別為1,
2……n-1,
n,初始時,所有住戶購買的雞排數都為
0。現只要求實現兩個非常簡單的功能,就是更新銷售資訊和查詢
[l,r]
區間內有幾位住戶購買的雞排數為
3的倍數。系統命令的表示如下:
1)0 l r
,表示標號在
[l,r]
範圍內的所有住戶都購買了一塊雞排。
2)1 l r
,詢問標號在
[l,r]
範圍內購買的雞排數目為
3的倍數的住戶數。
現有已知有q
條該系統的操作記錄,但蟲蟲很忙,
xyiyy
希望你能幫忙實現這個系統。
第一行包含兩個數字n,q
,表示住戶的數目,
1<=n
,q<=100000。
接下來q
行由三個數字組成,0,
l,r或者
1,l,
r,分別表示兩種操作,
1<=l
,r<=n。
對於每一次的詢問操作輸出購買的雞排數目為3的倍數的住戶數
4 71 1 4
0 2 3
0 2 4
1 1 1
0 1 4
1 4 4
1 1 44
1 0
2 題目大意:求給定區間內的數為為3的倍數的數的個數。
大致思路:很直白的線段樹。最開始老是想著單點更新才能統計某乙個數到底是不是三的倍數,當時聽做出來的人一直說「模三迴圈」感覺有點意思然完全不知道應該怎麼寫。後來又仔細去扣這句話扣了大半天發現也不過就三種情況n%3==0 , n%3==1 , n%3==2 無非這三種可能,也不太懂怎麼個迴圈法....後來嘗試分別用zero[rt],one[rt],two[rt]來表示區間內數字為3的倍數餘0,餘1,餘2的個數。那麼每次詢問的就是zero[rt]. 。
再來解決單點更新的問題。感覺不是很好想,想了很久仔細把樣例手動模擬一遍才發現如果在整個區間上加上一的話,原本區間內餘數為二的就會加一變成餘數為0的,另外兩個會同理跟著一起改變,實現了迴圈: 1->2,2->3,3->1. 而加上二的話就每個迴圈移兩位:1->3,2->1,3->2,加上三就不影響。這樣就每次可以在區間更新時用上lazy tag不必每次更新到葉子結點了。
#includeusing namespace std;
#define ll long long
#define lson l,m,rt<<1
#define rson m+1,r,rt<<1|1
const int n=1e5+5;
ll add[n<<2];
ll zero[n<<2],one[n<<2],two[n<<2];
void pushup(int rt)
void solve(int rt)
void solve2(int rt)
void pushdown(int rt,int m)
if(add[rt]%3==2)
add[rt]=0;
} }
void build(int l,int r,int rt)
int m=(l+r)>>1;
build(lson);
build(rson);
pushup(rt);
}
void update(int l,int r,int c,int l,int r,int rt)
pushdown(rt,r-l+1);
int m=(l+r)>>1;
if(l<=m)
update(l,r,c,lson);
if(r>m)
update(l,r,c,rson);
pushup(rt);
}
ll query(int l,int r,int l,int r,int rt)
int main(int argc, char** argv)
// for(int i=1;i<=n*2-1;i++) cout/ for(int i=1;i<=n*2-1;i++) cout<<"("<}
return 0;
}
SHUOJ幾隊周尼瑪
超級無敵張小豪是a國的一名勇士,a國的勇士都要靠獲得能量變得更強,在a國勇士獲得能量只有唯一的一種途徑就是膜拜宙斯神 周尼瑪 桑!要膜拜周尼瑪就要去到遙遠的大日國那裡有好多好多周尼瑪 桑!但是周尼瑪 桑!是一種群居動物,一隊周尼瑪 桑!中都有且只有乙個領袖叫周尼瑪你妹 桑!超級無敵張小豪勇士必須拿著...
SHUOJ新增好友
tony最近喜歡上了龍之谷遊戲,所以他想叫上他的好友組建乙個公會來一起享受這款遊戲。tony一共有n個好友,他可以叫上任意k 1 k n 個好友來組建公會,並且所有好友都會答應他的請求。問tony一共可以有多少種方案組建這個公會?只要不是完全相同的人組建的方案視為不同方案,並且tony至少要叫上乙個...
197 階乘分解(質數)
階乘分解 給定整數 n 試把階乘 n 分解質因數,按照算術基本定理的形式輸出分解結果中的 pi 和 ci 即可。輸入格式 乙個整數n。輸出格式 n 分解質因數後的結果,共若干行,每行一對pi,ci,表示含有pcii項。按照pi從小到大的順序輸出。資料範圍 1 n 106 輸入樣例 5輸出樣例 2 3...