1002.operation
傳送:題意:給定乙個長度為$n$的數列,$m$次操作,每次操作如下:
$0 l r$:查詢區間$[l,r]$內若干個數的最大異或和。
$1 x$:給數列末尾新增乙個數$x$。
資料範圍:$1<=n,m<=5e5,1<=a_i<=2^$。
分析:開始直接考慮用線段樹維護區間線性基的並,然後每次查詢求區間線性基,再求最大。(但是tle
貪心考慮答案。區間$[1,i]$的線性基一定是由$[1,i-1]$的線性基插入$a_i$後得到的。那麼可以通過維護線性基的字首和來得到答案。
(qaq,指路網友部落格:
1 #include21002using
namespace
std;
3 typedef long
long
ll;4
const
int maxn=5e5+10;5
struct
linear_basis
13for (int i=32;i>=0;i--)
20else
25 x^=b[tot][i];26}
27}28}
29}30 ll query(int l,int
r)35
return
res;36}
37void clear(int
n)40
}lb;
41int
main()
50 ll lastans=0;51
while (m--)
61else66}
67}68return0;
69 }
1004.vacation
傳送:題意:乙個路口,你前面有$n$輛車,給出每輛車的車長,距離路口的距離,以及每輛車的最大車速。要求這$n+1$輛車依此通過,問你的車頭通過路口的時間花費了多少。
資料範圍:$1<=n<=10^5,1<= s_i, v_i, l_i <=10^9$。
分析:
1 #include21004#define ll long long
3using
namespace
std;
4const
int maxn=1e5+7;5
struct node p[maxn];
6int
main()722
return0;
23 }
1005.path
傳送:題意:有$n$點,$m$條路,要求切斷一些路,使得從$1-n$的路比最短路大的最小花費。切斷每一條路的花費就是每一條路的長度。
資料範圍:$1<=n,m<=10^5,1<=c<=10^9$。
分析:題目要求就是要去掉一些路,使得最短路不成立。跑最短路選取出所有的最短路的邊,然後用這些邊跑最小割即可。
1 #include2 #include3 #include4 #include5 #include61005#define en '\n'
7#define low(x) (x)&(-x)
8#define m(a,b) memset(a,b,sizeof a)
9using
namespace
std;
10 typedef long
long
ll;11
const
int n=2e4+10,m=n;
12const ll inf=1e18;
13struct edgee[m],edge[m<<1
];14
struct nodep[m];
15int
head[n],tot,head2[n],ttt,n,m;
16void add(int
from,int
to,ll len)
17;head[from]=tot;
19 edge[++tot]=(edge);head[to]=tot;20}
21void add_edge(int
from,int
to,ll len);head2[from]=ttt;23}
24 priority_queueint>>q;
25ll d[n],da[n],db[n];
26void dijkstra(int
s)2741}
42}43}
44int
s,t;
45 queueq;
46bool
bfs()
4762}63
}64return0;
65}66 ll dinic(int
x,ll flow)
6777 edge[i].len-=k,edge[i^1].len+=k,res-=k;78}
79}80return flow-res;81}
82int
main()
8395 dijkstra(1
);96
if(d[n]==inf)
97for (int i=0;i<=n;i++) da[i]=d[i],head2[i]=0
;98 ttt=0;99
for(int i=1;i<=m;++i) add_edge(p[i].y,p[i].x,p[i].c);
100dijkstra(n);
101for (int i=1;i<=n;i++) db[i]=d[i];
102for(int i=1;i<=m;++i)
103107
for (int i=0;i<=n;i++) d[i]=0
;108 s=1,t=n;
109 ll maxflow=0
;110
while(bfs()) maxflow+=dinic(s,inf);
111 printf("
%lld\n
",maxflow);
112}
113 }
2019HDU多校第一場 BLANK DP
題意 有四種數字,現在有若干個限制條件 每個區間中不同的數字種類必須是多少種,問合法的方案數。思路 定義 dp i j k t 代表填完前 t 個位置後,這 4 個數字最後一次出現的位置,排序後為 i,j,k,t i j k t 的方案數目,則按照第 t 1 位的數字的四種選擇,可以得 到四種轉移。...
2019杭電多校第一場
dp i j k t dp i j k t dp i j k t 表示0 1 2,3 0,1,2,3 0,1,2,3出現的位置排序後為i,j k,t i,j,k,t i,j,k,t的方案數 列舉第t 1 t 1t 1位的情況進行轉移 對於限制情況,固定右端點,暴力列舉所有狀態,把所有非法狀態清零 i...
2019 杭電多校(第一場)
題目 1002 operation 線性基 題意給你n個數 兩個操作,查詢l r區間異或最大值 在陣列最後麵加一數 思路維護兩個陣列 1 b i j 儲存a 1 到a i 之間的第j位線性基。2 pos i j 儲存最大的l a l 使得b i j 有值。對於每一次詢問 l,r 如果pos r j ...