乙個區間的貢獻為這個區間的不同數字的個數,求所有子區間的貢獻和
反向思考,計算乙個數字在子區間**現的次數,當區間的左端點在這個數字上一次出現位置和當前位置之間,並且右端點在當前位置之後,這個數字都產生了貢獻,所以當前位置的數字的貢獻就是左端點數量*右端點數量,然後遍歷一遍。
#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記錄所有數字的貢獻就...