當(dāng)前位置:
首頁(yè) >
jzoj1282-资源勘探【统计】
發(fā)布時(shí)間:2023/12/3
28
豆豆
生活随笔
收集整理的這篇文章主要介紹了
jzoj1282-资源勘探【统计】
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
正題
題目鏈接:https://gmoj.net/senior/#contest/show/3146/2
題目大意
一個(gè)以左上角為端點(diǎn)的子矩形價(jià)值定義為區(qū)間內(nèi)唯一的數(shù)的數(shù)量,求所有子矩形的權(quán)值和。
解題思路
考慮每個(gè)數(shù)字的貢獻(xiàn),對(duì)于相同的數(shù)字,產(chǎn)生貢獻(xiàn)的右下角一定是一個(gè)若干個(gè)矩形。我們對(duì)于每個(gè)數(shù)存一個(gè)hi,li,rih_i,l_i,r_ihi?,li?,ri?表示上一個(gè)有貢獻(xiàn)的點(diǎn)的xxx坐標(biāo),在li~ril_i\sim r_ili?~ri?范圍可以產(chǎn)生貢獻(xiàn)。
然后統(tǒng)計(jì)即可,時(shí)間復(fù)雜度O(nm)O(nm)O(nm)
codecodecode
#include<cstdio> #include<cstring> #include<algorithm> #define ll long long using namespace std; const ll N=1110,XJQ=19900907; ll n,m,h[N*N],r[N*N],l[N*N],ans; int main() {scanf("%lld%lld",&n,&m);for(ll i=1;i<=n;i++){for(ll j=1;j<=m;j++){ll x;scanf("%lld",&x);if(!h[x]){h[x]=i;l[x]=j;r[x]=m+1;}else if(j<l[x]){(ans+=(i-h[x])*(r[x]-l[x])%XJQ)%=XJQ;h[x]=i;r[x]=l[x];l[x]=j;}else if(j<r[x]){(ans+=(i-h[x])*(r[x]-j)%XJQ)%=XJQ;r[x]=j;}}}for(ll i=1;i<=n*m;i++)if(h[i])(ans+=(n-h[i]+1)*(r[i]-l[i])%XJQ)%=XJQ;printf("%lld",ans); }總結(jié)
以上是生活随笔為你收集整理的jzoj1282-资源勘探【统计】的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: jzoj1281-旅行【dp】
- 下一篇: jzoj4279-[NOIP2015模拟