簡單的區間合併,因為最終結果的長度最多為4,所以dp設為3維,dp[i][j][k]表示[i, j]區間內能否由k這個字母產生。
#include
using
namespace std;
typedef
long
long ll;
//三年競賽一場空,不開long long見祖宗
//typedef __int128 lll;
#define print(i) cout << "debug: " << i << endl
#define close() ios::sync_with_stdio(0), cin.tie(0), cout.tie(0)
#define mem(a, b) memset(a, b, sizeof(a))
#define x first
#define y second
typedef pair<
int,
int> par;
const ll mod =
1e9+7;
const
int maxn =
210;
const
int inf =
0x3f3f3f3f
;int dp[maxn]
[maxn][5
];char s[maxn]
;vector vec[5]
;char tochar=
;map<
char
,int
> toint;
int num[5]
;int
main()
}}int flag =0;
for(
int i =
1; i <=
4; i++)if
(dp[1]
[n][i]
) cout << tochar[i]
, flag =1;
if(!flag) cout <<
"the name is wrong!"
; cout << endl;
}
線段樹(2)區間修改
快速序列操作i,給出乙個n個元素的陣列a1,a2,an,你的任務是設計乙個資料結構支援一下兩種操作 set l,r,v 把al,al 1,ar的值全部修改為v v 0 query l,r 計算子串行al,al 1,ar的元素和 最小值和最大值。include include using namesp...
線段樹2(區間更新)
區間更新是指更新某個區間內的葉子節點的值,因為涉及到的葉子節點不止乙個,而葉子節點會影響其相應的非葉父節點,那麼回溯需要更新的非葉子節點也會有很多,如果一次性更新完,操作的時間複雜度肯定不是o lgn 例如當我們要更新區間 0,3 內的葉子節點時,需要更新出了葉子節點3,9外的所有其他節點。為此引入...
模板 線段樹(2)區間修改
好像叫做懶操作來著。還是叫延遲修改更高大上一點吧 區間修改 兩種操作 add l r v 把a l a l 1 a r 的值全部增加v query l r 計算子串行a l a l 1 a r 的元素和,最小值和最大值 修改 查詢的範圍均為 y1,y2 維護節點o,它對應區間 l,r void ma...