比賽當天因為在槓hnoi2016的大資料結構沒有參加,今天補了一下。挺好玩的雖然不看一句話題意的話真的卡讀題
此生無悔入東方,來世願生幻想鄉一句話題意:
有乙個長度為n的整數序列,共m個時刻,在每個時刻都有乙個操作,如果是詢問操作則詢問指定時刻一段區間的和,如果是修改操作則使修改指定時刻到當前時刻的所有時刻一段區間全部增加乙個數,另一段區間全部減少乙個數
令t代表指定時間
詢問和修改拆開
顯然的偏序關係:
\[id' < id,\ t' \le t,\ x' \le x
\]cdq分治,x那一維的字首加和字首求和樹狀陣列搞就行了
#include #include #include #include using namespace std;
typedef long long ll;
const int n=2e5+5;
inline int read()
while(c>='0'&&c<='9')
return x*f;
}int n, m, a[n], d, l, r, t; ll s[n], ans[n];
char op[3];
struct meow
void print(int a)
} q[n], _q[n];
int tot, q;
inline void divide(int type) ;
tot++; q[tot] = (meow);
ans[q] += s[r] - s[l-1];
} else ;
tot++; q[tot] = (meow);
l=read(); r=read(); d=read();
tot++; q[tot] = (meow);
tot++; q[tot] = (meow);
t=read();
q[tot].t = q[tot-1].t = q[tot-2].t = q[tot-3].t = t; }}
namespace bit
} inline ll sum(int p)
inline ll sum(int l, int r)
}c1, c2;
inline void init()
inline void add(int l, int r, ll d)
inline ll sum(int l, int r)
} using bit::add; using bit::sum;
void cdq(int l, int r)
while(c>='0'&&c<='9')
return x*f;
}int n, m, a[n], b[n]; double val[n];
struct edge e[n<<1];
int cnt=1, h[n];
inline void ins(int u, int v) ; h[u]=cnt;
e[++cnt]=(edge); h[v]=cnt;
}namespace tr
f[u] = max(f[u], all-size[u]);
if(f[u] < f[root]) root = u;
} double d[n]; int st[n], top;
void dfscal(int u, int fa, int deep, double now, int rt)
void dfsadd(int u, int fa, int deep, double now, int rt)
bool dfs(int u)
while(top) d[ st[top--] ] = 1e18;
if(ans) return true;
for(int i=h[u];i;i=e[i].ne)
if(!vis[e[i].v])
return false;
} bool check(double mid)
}void solve()
if(l > 2e10 - 1e-3) puts("-1");
else printf("%.2lf", l);
}int main()
for(int i=1; i一句話題意:
給個仙人掌,仙人掌上每個點都能填入[1,t]中的整數,第i個點填j會獲得收益v[i][j],求乙個最小的c,使得存在一種填數的方案,滿足沒有兩個用邊相鄰的點填的數差值超過c且所有點的收益和不超過w
二分c,搖身一變成為切糕
#include #include #include #include using namespace std;
typedef long long ll;
const int n=1e5+5, m=1e6+5, inf=1e9;
inline int read()
while(c>='0'&&c<='9')
return x*f;
}int n, m, w, k, val[155][155], s, t;
struct meow a[205];
namespace mf e[m];
int cnt=1, h[n];
inline void ins(int u, int v, int c) ; h[u]=cnt;
e[++cnt]=(edge); h[v]=cnt; }
int q[n], head, tail, d[n], vis[n];
bool bfs()
} return false;
} int cur[n];
int dfs(int u, int a)
if(a) d[u] = -1;
return flow;
} int dinic()
return flow;
} bool check(int d)
printf("%d", ans);
}int main()
膜你賽 ROAD (跑路)
小a的家到公司的路可以看做乙個有向圖,小a家為點1,公司為點n,每條邊長度均為一千公尺。假設小a每秒鐘可以跑2 k千公尺 k是任意數 當然,所以總跑路長度不能超過maxlongint千公尺。問最少需要幾秒才能到公司。資料保證1到n至少有一條路徑。第一行兩個整數n,m,表示點的個數和邊的個數。接下來m...
2018 10 30 膜你賽 火柴
題目 題目描述 p同學總共有k根火柴,分別放在擺成一列的n個火柴盒內,保證k是n的倍數。p同學想要每個火柴盒都有相同數目的火柴,每次他可以從乙個火柴盒中拿一根火柴放到相鄰的火柴盒中。他想知道他最少要移動多少次。輸入輸出格式 輸入格式 第一行乙個整數n,表示火柴盒數。第二行n個整數a 1,a 2,a ...
2018 10 30 膜你賽 咒語
題目 題目描述 亮亮夢到自己來到了魔法城堡,但一扇巨大的石門阻攔了他通向城堡內的路。正當他沮喪之際,突然發現門上有一處機關,機關上有一張很長的紙條。亮亮拿起紙條的一端,只見上面寫著開啟機關的方法 開啟機關需要唸動符咒,咒語是一串長為 l 的由 0 和 1 組成的字串。在這張長紙條上列了 n 個 長為...