給定乙個長度為 n的序列,你有一次機會選中一段連續的長度不超過 d的區間,將裡面所有數字全部修改為 0。請找到最長的一段連續區間,使得該區間內所有數字之和不超過 p。
顯然長度為d時只會更優,尺取法列舉,單調佇列維護被刪除的一段
#includeusingview codenamespace
std;
#define ll long longinline ll read()
while(ch < '
0'||ch > '9'
);
dowhile(ch >= '
0'&&ch <= '9'
);
return f*x;
}const
int maxn = 2000000 + 5
;ll n,p,d;
ll sum[maxn],a[maxn];
ll ans;
ll q[maxn],head = 1
,tail;
inline ll calc(ll x)
intmain()
ans = max(ans, 1ll * i - l + 1
);
} cout
<< ans <
}
給出兩個長度相同的的只含大寫字母的字串 a,b
每次可以交換相鄰字元,求a到b的最小交換次數
火柴排隊弱化版?
顯然逆序對
#includeusingview codenamespace
std;
#define ll long longinline ll read()
while(ch < '
0'||ch > '9'
);
dowhile(ch >= '
0'&&ch <= '9'
);
return f*x;
}const
int maxn = 1000000 + 5
;int
n;char
s[maxn];
inta[maxn];
queue
q[30
];ll c[maxn];
inline
int lowbit(int
x)inline ll query(ll x)
return
res;
}inline
void update(int x,intv)}
intmain()
cout
<< ans <
}
給一顆樹,1號節點已經被染黑,其餘是白的,兩個人輪流操作,一開始b在1號節點,a選擇k個點染黑,然後b走一步,如果b能走到a沒染的節點則b勝,否則當a染完全部的點時,a勝。
求能讓a獲勝的最小的k
顯然二分答案
考慮樹形dp檢驗
顯然只需要考慮再子樹i中最多需要染幾次色
把兒子不夠的染色次數合併上來即可
#includeusingview codenamespace
std;
#define ll long longinline ll read()
while(ch < '
0'||ch > '9'
);
dowhile(ch >= '
0'&&ch <= '9'
);
return f*x;
}const
int maxn = 3e5 + 10
;int
n,ans;
vector
g[maxn];
intdp[maxn];
inline
void dfs(int x,int f,int
mid)
dp[x] = max(0,dp[x]+sz-mid);
}inline
bool check(int
mid)
intmain()
int l = 0,r =n;
while(l <=r)
else l = mid + 1
; }
cout
<< ans <
}
bzoj 題目選做
1.輪狀病毒 題目是很沒意思的 列出狀態 顯然無法遞推 我簡單推了一下加動態加點的狀態 嗯發現規律沒有那麼簡單 打表 也不太能發現吧 正解顯然是 矩陣樹定理啊 然後這題咕了 以後再複習矩陣樹定理的時候再證明這個結論吧 暫時當做打表做的。f n f n 3 f 2 然後高精加和高精減即可。由於都是高精...
開始做POI啦
為了效率搞了這麼乙個庫 現在版本號1.14 一月十四日更新版本囧.source precompiled 版權之類就隨他去吧.wtfpl.用法 釋放在include檔案目錄裡就可以使用 include啦.當然對於lemon cena之類也適用 或者如果不要求評測.可以用 include poi.h 因...
選數 題目 1025
已知 nn 個整數 x1,x2,xnx1,x2,xn,以及乙個整數 k k n k k n 從 nn 個整數中任選 kk 個整數相加,可分別得到一系列的和。例如當 n 4,k 3n 4,k 3 4 個整數分別為 3,7,12,19 時,可得全部的組合與它們的和為 3 7 12 22 3 7 19 2...