临时代码存储

#include <bits/stdc++.h>
#define mk make_pair
using ll = long long;
using namespace std;
using pii = pair<int,int>;
const int N=2505;
int n,m,ans,k,val[N];
vector<int>g[N];
set<int>s[N][2];
bitset<N>bit[N];
inline void bfs(int x){
	queue<int>q;
	bit[x][x]=1;
	q.emplace(x);
	while(!q.empty()){
		int u=q.front().second;
		q.pop();
		for(int v:g[u]){
			if(!bit[x][v]&&bit[1][v]){
				if(v<*s[u][0].begin())s[u][0].emplace(v);
				if(s[u][0].size()>3)s[u][0].erase(s.begin());
				q.emplace(v);
			}else if(!bit[x][v]&&bit[n][v]){
				if(v<*s[u][1].begin())s[u][1].emplace(v);
				if(s[u][1].size()>3)s[u][1].erase(s.begin());
				q.emplace(v);
			}else if(!bit[x][v])q.emplace(v);
		}
	}
}
int main(){
	cin>>n>>m>>k;
	for(int i=1;i<=n;++i)cin>>val[i];
	for(int x=0,y=0;m--;){
		cin>>x>>y;
		g[x].emplace_back(y),g[y].emplace_back(x);
	}
	bfs(1),bfs(n);
	for(int i=2;i<n;++i)bfs(i);
	for(int i=1;i<=n;++i){
		for(int j=1;j<=n;++j){
			if(!bit[1][i]||!bit[j][n])continue;
			set<int>st;
			for(int x:s[i][0])st.emplace(x);
			for(int x:s[j][1])st.emplace(x);
			if(st.find(i))st.erase(i);
			if(st.find(j))st.erase(j);
			ans=max(ans,val[])
		}
	}
	return 0;
}

noip2022 比赛

#include <bits/stdc++.h>
#define ls (u<<1)
#define rs (u<<1|1)
#define lson ls,l,mid
#define rson rs,mid+1,r
#define mid ((l+r)>>1)
using ll = long long;
using ull = unsigned long long;
using namespace std;
const int N=2.5e5+10,maxn=2.5e5;
int task,n,Q,Sigma;
struct Msg{
	ull sumx,sumy,sumxy,sums;
	Msg(ull SUMX=0,ull SUMY=0,ull SUMXY=0,ull SUMS=0){
		sumx=SUMX, sumy=SUMY, sumxy=SUMXY, sums=SUMS;
	}
	Msg operator +(const Msg& tt)const{
		return Msg(sumx+tt.sumx,sumy+tt.sumy,sumxy+tt.sumxy,sums+tt.sums);
	}
}msg[N<<2];
struct Tag{
	ull addx,addy,addxy,addc,setx,sety;
	// delta S = addx * X + addy * Y + addxy * XY + addc
	// addc : 1 addx : X addy : Y addxy : XY
	// set -> add
	Tag(ull ADDX=0,ull ADDY=0,ull ADDXY=0,ull ADDC=0,ull SETX=0,ull SETY=0){
		addx=ADDX, addy=ADDY, addxy=ADDXY, addc=ADDC, setx=SETX, sety=SETY;
	}
	bool Empty(void){
		return addx||addy||addxy||addc||setx||sety;
	}
	// tt * self , return tt -> self.
	inline Tag operator *(const Tag& tt)const{
		// Merge self & tt -> RETURN
		Tag t=Tag();
		t.addx=tt.addx,t.addy=tt.addy,t.addxy=tt.addxy,t.addc=tt.addc;
		t.setx=tt.setx,t.sety=tt.sety;
		// apply new Tag : Self
		if(setx){
			t.addc += t.setx * addx;
			if(sety){
				t.addc += addxy * t.setx * t.sety;
			}else t.addy += addxy * t.setx;
		}else{
			t.addx += addx;
			if(sety) t.addx += addxy * t.sety;
			else t.addxy += addxy;
		}
		if(sety)t.addc+=addy*sety;
		else t.addy+=addy;
		t.addc += addc;
		if(setx)t.setx=setx;
		if(sety)t.sety=sety; 
		return t;
	}
	inline Msg apply(const Msg& t,ull len)const{
		// t ( length = len ) --- self ( Tag ) ---> RETURN
		return Msg(
			setx ? setx * len : t.sumx, 
			sety ? sety * len : t.sumy,
			setx ? ( sety ? setx*sety*len : setx * t.sumy ) : ( sety ? sety * t.sumx : t.sumxy),
			t.sums + addx * t.sumx + addy * t.sumy + addx * addy * t.sumxy + addc * len
		);
	}
}tag[N<<2];
inline void pushup(int u,ull len){
	return tag[u].apply(msg[u]=msg[ls]+msg[rs],len),void();
}
inline void apply(int u,const Tag& t,ull len){
	msg[u] = t.apply(msg[u],len);
	tag[u] = tag[u] * t;
}
ull a[N],b[N],ans[N];
int stk1[N],stk2[N],tp1,tp2;
	// stk 1 -> array A stk 2 -> array B
inline void pushdown(int u,int l,int r){
	if(tag[u].Empty()){
		apply(ls,tag[u],r-l+1);
		apply(rs,tag[u],r-l+1);
		tag[u]=Tag();
	}
}
struct Query{
	int l,r,id;
	Query(int L=0,int R=0,int ID=0){ l=L,r=R,id=ID; }
	bool operator <(const Query& tt)const{ return r<tt.r; }
}q[N];
ull Qry(int u, int l, int r, int L, int R){
	if( L <= l && r <= R ) return msg[u].sums;
	// Empty ...... Query
	pushdown(u,l,r);
	ull res = 0;
	if(L <= mid) res += Qry(lson,L,R);
	if(R > mid) res += Qry(rson,L,R);
	return res;
}
void modify(int u,int l,int r,int L,int R,Tag t){
	if( L <= l && r <= R ) return apply(u,t,r-l+1);
//	printf("MODIFY  %d %d %d %d %d Tag\n",u,l,r,L,R);
	pushdown(u,l,r);
	if(L <= mid) modify(lson,L,R,t);
	if(R > mid) modify(rson,L,R,t);
	return;
}
struct brd{
	int l,id;
	brd(int L=0,int ID=0){ l=L,id=ID; }
};
vector<brd>idx[N];
int main(){
//	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);
	cin>>task>>n;
	for(int i=1;i<=n;++i)cin>>a[i];
	for(int i=1;i<=n;++i)cin>>b[i];
	cin>>Q;
	for(int i=1,L,R;i<=Q;++i)cin>>L>>R,q[i]=Query(L,R,i),idx[R].emplace_back(brd(L,i));
	stable_sort(q+1,q+Q+1);
	for(int i=1;i<=n;++i){
		while(tp1 && a[stk1[tp1]] < a[i]) --tp1;
		while(tp2 && b[stk2[tp2]] < b[i]) --tp2;
		int u=stk1[tp1], v=stk2[tp2];
			// u : ( u , i ]   v : ( v , i ]
		printf(" i = %d u = %d v = %d\n",i,u,v);
		modify(1, 1, n, u+1, i, Tag(0,0,0,0,a[i],0));
		modify(1, 1, n, v+1, i, Tag(0,0,0,0,0,b[i]));
		  // check : setx = 0 or sety = 0
		modify(1, 1, n, 1, i, Tag(0,0,1,0,0,0));
		for(brd ele:idx[i])ans[ele.id]=Qry(1,1,n,ele.l,i);
		stk1[++tp1]=i,stk2[++tp2]=i;
	}
	for(int i=1;i<=Q;++i)cout<<ans[i]<<"\n";
	return cout<<Sigma<<"\n",0;
}
// CHK : sync_with_stdio

窗口的星星

include <bits/stdc++.h>

define E(i, l, r) for(int i = l;i <= r;++ i)

define mk make_pair

define ls (u << 1)

define rs (u << 1|1)

define lson ls, l, mid

define rson rs, mid + 1, r

define mid ((l + r) >> 1)

using ll = long long;
using namespace std;
using P = pair<int, int>;
namespace wangcy {
const int N = 1e6 + 10, M = 2e6 + 10;
int n, W, H, x[N], y[N], l[N];
struct sgt {
int tr[N << 2], tag[N << 2];
inline void pd(int u, int l, int r){
tr[u] += tag[u];
tag[ls] += tag[u];
tag[rs] += tag[u];
tag[u] = 0;
}
inline void pu(int u, int l, int r){
pd(lson), pd(rson);
tr[u] = max(tr[ls], tr[rs]);
}
inline void apply(int u, int l, int r, int k){
tag[u] += k;
}
void upd(int u, int l, int r, int L, int R, int k){
if(L <= l && r <= R) return apply(u, l, r);
pd(u, l, r);
if(L <= mid) upd(lson, L, R, k);
if(R > mid) upd(rson, L, R, k);
return pu(u, l, r);
}
int qry(int u, int l, int r, int L, int R) {
pd(u, l, r);
if(L <= l && r <= R) return tr[u];
int res = 0;
if(L <= mid) res = max(res, qry(lson, L, R));
if(r > mid) res = max(res, qry(rson, L ,R));
return res;
}
};
inline void Main(){
cin >> n >> W >> H;

}

}
signed main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int tt = 1;
while(tt --) wangcy::Main();
return 0;
}

凉凉

include <bits/stdc++.h>

define E(i, l, r) for(int i = l;i <= r;++ i)

using ll = long long;
using namespace std;
namespace wangcy{
const int N = 16, M = 1e5 + 10, U = (1 << 16);
int n, m, a[N][M], Q[N][N], cost[N][N], F[U], c[U][N], f[U][N];
vector v[N];
bitset bit[N];
inline void Main(){
cin >> n >> m;
E(i, 1, n) E(j, 1, m) cin >> a[i][j];
E(i, 1, n) {
int c, w;
cin >> c;
E(j, 1, c) cin >> w, v[i].emplace_back(w), cost[i][j] += a[i][j], bit[i][w] = 1;
}
int V = (1 << n) - 1;
E(I, 0, V) E(j, 1, n) E(k, 0, n - 1) if(I >> k & 1) c[I][j] += cost[k + 1][j];
E(I, 0, V) E(j, 1, n) printf("c [ %d ] [ %d ] = %d\n",I,j,c[I][j]);
E(i, 1, n) E(j, 1, n) Q[i][j] = !!(bit[i] & bit[j]).count();
E(I, 0, V) {
if(!I) {
F[I] = 1;
continue;
}
int low = (I & -I), Minus = I - (1 << low);
F[I] = F[Minus];
E(i, 0, n) if(I >> i & 1) F[I] &= Q[low][i + 1];
}
memset(f, 0x3f, sizeof f);
E(S, 0, V) f[S][0] = 0;
E(S, 0, V) E(i, 1, n) for(int T = S;T;T = (T - 1)&S){
f[S][i] = min(f[S][i], f[T][i-1] + cost[S ^ T][i] * F[S ^ T]);
}
return cout << f[V][n] << "\n", void();
}
}
int main(){
ios::sync_with_stdio(0), cin.tie(0), cout.tie(0);
int tt = 1;
while(tt --) wangcy::Main();
return 0;
}

项链(necklace)

#include <bits/stdc++.h>
#define E(i, l, r) for(int i = l; i <= r; ++ i)
using ll = long long;
using namespace std;
using P = pair <int, int>;
const int N = 1e6 + 10;
int tid, n, m, ans, res;
int prv[N], nxt[N], a[N];
priority_queue <P> q;
vector <int> seq;
set <int> s;
bitset <N> bit;
int main() {
	cin >> tid >> n >> m, m = n - m;
	E (i, 1, n) prv[i] = i - 1, nxt[i] = i + 1, cin >> a[i];
	prv[1] = n, nxt[n] = 1;
	E (i, 1, n - 1) {
		if(nxt[i] > n) break;
		q.emplace(make_pair(a[i] + a[nxt[i]], i));
	}
	while (m --) {
		P u = q.top(); q.pop();
		int pos = u.second, p1 = pos, p2 = nxt[pos];
		if (bit[p1] || bit[p2]) continue;
		if (a[p1] > p2) {
			bit[p1] = 1;
			seq.emplace_back(p1);
			nxt[prv[p1]] = nxt[p1], prv[nxt[p1]] = prv[p1];
			q.emplace(make_pair(a[prv[p1]] + a[nxt[p1]], prv[p1]));
		} else {
			bit[p2] = 1;
			seq.emplace_back(p2);
			nxt[prv[p2]] = nxt[p2], prv[nxt[p2]] = prv[p2];
			q.emplace(make_pair(a[prv[p2]] + a[nxt[p2]], prv[p2]));
		}
	}
	int cur = 0;
	E (i, 1, n) if (!bit[i]) prv[i] = cur, nxt[cur] = i, s.emplace(i), res = max(res, );
	E (int x: seq) {
		auto R = s.lower_bound(x), L = s.upper_bound(x);
		if (L == s.begin()) {
			
		}
		-- L;
		
	}
	return cout << ans << "\n", 0;
}
posted @ 2025-09-12 21:25  ChihiroFujisaki  阅读(8)  评论(0)    收藏  举报