2017種樹
題目描述
2017共有n棵樹從0到n-1標號。現要把這些樹種在一條直線上,第i棵樹的種植位置x[i]如下確定:
x[0] = x[0] mod l;
x[i] = (x[i-1]*a+b) mod l。
每棵樹種植的費用,是所有標號比它小的樹與它的距離之和。2017請你計算各棵樹的費用之積,最後對1000000007取餘。
輸入格式
共五行:
第一行為n
第二行為l
第三行為x[0]
第四行為a
第五行為b
輸出格式
總費用樣例
樣例輸入
5103
11
樣例輸出
180
樣例解釋:
5棵樹的位置分別為: 3, 4, 5, 6, 7.
費用分別為: 1, 3, 6, 10. (從第一棵樹開始)
總費用為: 1 × 3 × 6 × 10 = 180.
資料範圍與提示
10%的資料:n<=10;
60%的資料:n<=2×10^5;
100%的資料:n,l<=200000; x[0] ,a, b<=10^9.∑(
xi−x
k)|x
i>=xk
,1≤k
≤i−1
'>思路:
思路:用線段樹維護的數
比x小的個數以及比x(第i個數的位置)小的數的和,比x大的樹的個數以及比x大的數的和,x的費用==(x×比x小的數的個數-比x小的數的和)+(比x大的數的和-x×比x大的數的個數)。
1 #include2view codeconst
int maxn=200000+10,mod=1000000007;3
int tree[maxn<<2],cnt[maxn<<2];4
intn,l,xx,a,b;
5int ans=1;6
void build(int rt,int l,int
r)12
int mid=(l+r)>>1;13
if(xx<=mid) build(rt<<1
,l,mid);
14else build(rt<<1|1,mid+1
,r);
15 tree[rt]=(tree[rt<<1]+tree[rt<<1|1])%mod;
16 cnt[rt]=cnt[rt<<1]+cnt[rt<<1|1
];17}18
int query(int rt,int l,int r,int s,int
t)24
int mid=(l+r)>>1;25
if(t<=mid) return query(rt<<1,l,mid,s,t)%mod;
26else
if(s>mid) return query(rt<<1|1,mid+1,r,s,t)%mod;
27else
return (query(rt<<1,l,mid,s,t)+query(rt<<1|1,mid+1,r,s,t))%mod;28}
29int query1(int rt,int l,int r,int s,int
t)38
void modify(int rt,int l,int r,int
w)44
int mid=(l+r)>>1;45
if(w<=mid) modify(rt<<1
,l,mid,w);
46else modify(rt<<1|1,mid+1
,r,w);
47 tree[rt]=(tree[rt<<1]+tree[rt<<1|1])%mod;
48 cnt[rt]=cnt[rt<<1]+cnt[rt<<1|1
];49}50
void solve(int
x)59
intmain()
69 printf("
%d\n
",ans);
70return0;
71 }
5 24 樹種統計
隨著衛星成像技術的應用,自然資源研究機構可以識別每一棵樹的種類。請編寫程式幫助研究人員統計每種樹的數量,計算每種樹佔總數的百分比。輸入格式 輸入首先給出正整數n 10 5 隨後n行,每行給出衛星觀測到的一棵樹的種類名稱。種類名稱由不超過30個英文本母和空格組成 大小寫不區分 輸出格式 按字典序遞增輸...
7 24 樹種統計
隨著衛星成像技術的應用,自然資源研究機構可以識別每一棵樹的種類。請編寫程式幫助研究人員統計每種樹的數量,計算每種樹佔總數的百分比。輸入首先給出正整數n 10 5 隨後n行,每行給出衛星觀測到的一棵樹的種類名稱。種類名稱由不超過30個英文本母和空格組成 大小寫不區分 按字典序遞增輸出各種樹的種類名稱及...
PTA 樹種統計
5 12 樹種統計 25分 隨著衛星成像技術的應用,自然資源研究機構可以識別每一棵樹的種類。請編寫程式幫助研究人員統計每種樹的數量,計算每種樹佔總數的百分比。輸入格式 輸入首先給出正整數n le 10 5 10 5 隨後n行,每行給出衛星觀測到的一棵樹的種類名稱。種類名稱由不超過30個英文本母和空格...