2019 牛客 多校賽 第八場

2021-09-26 02:17:11 字數 1183 閱讀 6330

乙個區間的貢獻為這個區間的不同數字的個數,求所有子區間的貢獻和

反向思考,計算乙個數字在子區間**現的次數,當區間的左端點在這個數字上一次出現位置和當前位置之間,並且右端點在當前位置之後,這個數字都產生了貢獻,所以當前位置的數字的貢獻就是左端點數量*右端點數量,然後遍歷一遍。

#include #define ll long long

using namespace std;

vectorv[100005];

int main()

ll ans = 0;

for (int i = 1; i <= 100000; i++) }

printf("%lld\n", ans);

}

1、手玩案例,然後對於2*2的矩陣,我們希望把他擴充套件到4*4的話,考慮將一行擴充套件為兩行,列翻倍。

2、新矩形的第一行是兩個原矩陣的第一行,新矩陣的第二行是原矩陣第一行+原矩陣第一行的相反數。

3、同理,向下擴充套件。

#include #define ll long long

using namespace std;

struct node

ans;

node t[15];

int main()

tt--;

ans.a[1][1] = 1;

ans.a[1][2] = 1;

ans.a[2][1] = 1;

ans.a[2][2] = -1;

int hang = 2;

while (tt--)

ans = t[tt];

hang = newhang - 1;

} for (int i = 1; i <= hang; i++)

}

string**好,自帶erase刪除方法。

#includeusing namespace std;

const int max = 1e5 + 5;

const int inf = 0x3f3f3f3f;

string s;

void solve()

else

it++;

}printf("%d\n", ans); }

int main(void)

2019牛客多校第八場

求所有極大全一矩陣的個數。created by keane on 2019 8 10.include using namespace std typedef long long ll const int n 3050 int a n n int n,m char s n 每個1向下延伸 int dw...

2019牛客多校第八場題解 A

a 給你乙個n m的01矩陣,求出所有最大全1矩陣的數量,保證任意兩個矩陣不相互包含。考慮單調棧求最大矩形面積的做法。對於矩陣 0 0 0 0 0 0 1 0 0 1 1 0 1 1 1 1 0 0 0 0 我們先預處理h i j 為以該行為底的最大高度。那麼我們只要知道這個矩形最左邊的能夠到達的位...

牛客多校第八場

簽到題,可真短。題意 給n個數,對於每個連續子串行求區間內不同數字的個數的和。做法 一開始列舉每個區間的右端點i,判斷每個數字在區間左端點為1 i這個範圍內對右端點i的貢獻,然後累加答案,然後超時了。之後想到,每次變化範圍只會變乙個數字,只會改變乙個數字的貢獻,所以開了乙個sum記錄所有數字的貢獻就...