liu_runda出的題再次$\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%\%$
題目中為什麼反覆強調簡單路徑,沒有環
沒有環的圖中點數-邊數=聯通塊數
字首和維護邊的字首和,和點的字首和,
在維護邊的字首和不好維護轉化為橫著邊字首和,豎著邊字首和
注意邊的邊界問題
看邊如何維護
就拿我的舉例
你在當前為邊且當前左面為邊時置為1
那麼當你統計答案時
ll bia=bianheng[x2][y2]-bianheng[x1-1][y2]-bianheng[x2][y1]+bianheng[x1-1][y1];
思考我們統計答案時要把x2相連的邊切斷
類似的,我們維護豎著的邊時也要類似操作
#includeusingnamespace
std;
#define ll int
#define a 2101
char
s[a][a];
ll vis[a][a],stax[
4200000],stay[4200000
],dian[a][a],bianheng[a][a],bianshu[a][a];
ll cnt=0
,n,m,q;
const ll nowx[5]=;
const ll nowy[5]=;
void
dfs(ll x,ll y,ll x1,ll y1,ll x2,ll y2)
}void
bfs(ll x1,ll y1,ll x2,ll y2)
}for(ll i=x1;i<=x2;i++)
for(ll j=y1;j<=y2;j++)
printf(
"%d\n
",cnt);
}int
main()
//memset()
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
if(s[i][j]=='
1'&&s[i-1][j]=='1'
)
if(s[i][j]=='1'
) }
for(ll i=1;i<=n;i++)
for(ll j=1;j<=m;j++)
//for(ll i=1;i<=n;i++,puts(""))
//for(ll j=1;j<=m;j++)
for(ll i=1,x1,x2,y1,y2;i<=q;i++)
}
其實就是求逆序對,然而逆序對是$n*log$的並不能過,思考優化
我們發現其實它給了多段等差數列,
先看所有等差數列都是完整的情況
我們在同一段等差數列上可以由$x[i-1]$推到$x[i]$思考我們找的是比當前大的個數,$x[i]=x[i-1]+a$所有之前等差數列貢獻都要減一
那麼設之前貢獻$tmp$得到當前貢獻$tmp-cnt(等差數列個數)$
那麼我們思考$假設當前值為$x$那麼逆序對數就是$i-sum(x)-1$
然後我們考慮第一段不是完整的
假設當前$x$轉移到$x2$中$x,x2$都比$begin$小那麼等差數列上所有小於$begin$貢獻都要減一(頭一段上沒有處於$x$--$x2$數不能轉移)
若當前已經比$begin$大了把它當成乙個正常等差數列
#includeusingnamespace
std;
#define ll long long
#define a 111111ll c[a];
ll tus,n,a,mod,now,cnt=0,ans=0
,last,tmp;
void
add(ll x,ll u)
ll sum(ll x)
intmain()
for(ll i=2;i<=n;i++)
else
ans+=tmp;
}printf(
"%lld\n
",ans);
}
周潤達 NOIP 模擬題 周任飛 題解
暴力深搜。不解釋。include include include define f x,y,z for int x y x z x using namespace std typedef long long ll const ll mod 1000000007 const ll size 100 l...
NOIP模擬測試20
liu runda聚聚的饋贈 problem a 周 防自閉題?這道題讓我整個考試都很愉悅 搜就完事了 1 include 2 3intn 4 int a 20 b 20 c 20 d 20 5 long long ans 67 void dfs int day,long long oi,long ...
NOIP模擬20 題解
來自達哥的問候 究級難題,完全不可做qaq include include include using namespace std typedef long long ll int n ll a 25 b 25 c 25 d 25 ans void dfs int step,ll mdx,ll lh...