北京集訓DAY3

2021-08-09 08:50:18 字數 3554 閱讀 1537

消去合法的序列 剩下的不合法序列一定是 ))....(((...

3兩種括號個數各加1除2 手算一下即可4*/

5 #include 6 #include 7 #include 8

9const

int maxn=100010;10

11int

len,top,cnt;

1213

char

s[maxn];

1415

inthh()

25int ans=(top+1)/2+(cnt+1)/2

;26 printf("

%d\n

",ans);

27fclose(stdin);

28fclose(stdout);

29return0;

30}3132

int sb=hh();

33int main(int argc,char**argv)

題解

維護乙個f陣列 f[i]表示i這個時刻 車上已經坐了幾隻怪獸了

3[x,y] z

4for (int i=x; i5

max=max(max,f[i]);

6t=min(z,m-max);

7for (int i=x; i8

ans+=t

9cout<10

顯然 可用線段樹維護區間加和區間查詢最大值

11*/

12 #include13 #include14 #include15 #include16 #include17

#define n 50005

18#define lson (root<<1)

19#define rson (root<<1|1)

20#define max(a,b) a=a>b?a:b

21using

namespace

std;

2223

intk,n,m,x,y,ans,tmp,val;

2425

int tree[n<<2],mark[n<<2

];26

27struct

node

33}node[n];

3435 inline int

qread()

39while(ch>='

0' && ch<='9')

40return x*j;41}

42void pushdown(int

root)

49int query(int root,int l,int r,int l,int

r) 58

void updata(int root,int l,int r,int l,int r,int

to)

65pushdown(root);

66int mid=(l+r)>>1;67

updata(lson,l,mid,l,r,to);

68 updata(rson,mid+1

,r,l,r,to);

69 tree[root]=max(tree[lson],tree[rson]);70}

71int

main()

80 sort(node+1,node+k+1

);81

for(int i=1;i<=k;i++)

89 printf("

%d\n

",ans);

90fclose(stdin);fclose(stdout);

91return0;

92 }

題解

列舉左上角 n^2 列舉右下角n^2 列舉修改的數 n^2 求和 n^2 -> n^8

3求乙個矩陣和,可以通過矩陣字首和做到o(1)

4列舉左上角 n^2 列舉右下角n^2 列舉修改的數 n^2 -> n^6

5預處理出每個矩陣的最小值是多少。 n^4

6列舉左上角 n^2 列舉右下角n^2 修改的數已知(修改最小的或者不修改) -》n^4

7n,m<=300

8假如我們不要求修改數,查詢最大子矩陣

9有n個數,查詢最大子段和 o(n)

10for (i=1; i<=n; i++) f[i]=max(f[i-1]+a[i],a[i]);

11max = 最大子段和

12要求我們修改數

13修改的數一定是最小的那個數。

14f[i][0]以i結尾並且沒有數被修改過的最大和

15f[i][1]以i結尾並且有數被修改過的最大和 //a[i] 第i列的和

16for (int i=1; i<=n; i++)

1721

max 是答案

22*/

23 #include 24 #include 25 #include 26 #include 27 #include 28

29const

int inf=1000000000;30

const

int maxn=305;31

32int

n,m,ans,p,k;

3334

int a[maxn][maxn],min[maxn],b[maxn],dp[maxn][2

],s[maxn][maxn];

3536 inline int min(int a,int

b) 39

40 inline int max(int a,int

b) 43

44int

hh()

52for(int i=1;i<=n;i++)

53for(int j=1;j<=m;j++)

54 s[i][j]=s[i-1][j]+a[i][j];

55for(int i=1;i<=n;i++)

67 } else

68 ans=max(ans,max(dp[m][1],dp[m][0

]));69}

70}71 printf("

%d\n

",ans);72}

73return0;

74}7576

int sb=hh();

77int main(int argc,char**argv)

題解

省隊集訓DAY3

一共要使用六根木棍,那麼分割的方法就兩種,那麼關鍵就是要計算2,3的數量。cnt1 i 表示每種長度的木棍的方案數 cnt2 i 最初表示用不同的木棍拼成長度為i邊的方案數,後來表示選出四根木棍構成的方案數。cnt22 i 表示用兩個長度相同的不同木棍拼成長度為i的邊的方案數。cnt3 i 表示用三...

紀中集訓 Day 3

這幾天一直堅持寫blog 加油吧!早上醒來,說了 我要ak 其實只是蒟蒻的妄想罷了qaq 然後為了不立flag,改成了我要rank 1 然後依舊是有一題不會做qaq 好弱,爭取有一次能全會做吧qaq 然後就230了 rank1 第3題果真是爆搜不過就算寫也難寫啦啦啦 a組的題又是喪病,t1數學題什麼...

集訓Day3 離散化 矩形覆蓋

矩形覆蓋 planting 問題描述 給定在乙個平面座標系上的n 1 n 100 個矩形區域,這n個矩形可能有相互覆蓋的部分。求平面上被所有矩形覆蓋的總面積,重複部分只算一次。輸入格式 planting.in 第一行乙個整數n。接下來n行,每行包含4個整數x1 y1 x2 y2,表示乙個矩形區域。矩...