orz xhk
5/50
1597: [Usaco2008 Mar]土地购买
$ f[i]=min(f[j]+x[i]*y[j+1]) $ 然后斜率优化
1699: [Usaco2007 Jan]Balanced Lineup排队
silver里好像做过?
静态RMQ直接上st表
1578: [Usaco2009 Feb]Stock Market 股票市场
看成完全背包。对于每天都搞一下完全背包
1574: [Usaco2009 Jan]地震损坏Damage
语文题QwQ。大力搜索,代码:

#include <bits/stdc++.h> using namespace std; const int maxn=30500, INF=1e9; int n, vis[maxn]; vector<int> G[maxn]; void Addedge(int u,int v ){ G[u].push_back(v); G[v].push_back(u); } int ans; int dfs(int x){ vis[x]=1; ans--; for(int i=0;i<G[x].size();i++){ int v=G[x][i]; if(!vis[v]){ vis[v]=1; dfs(v); } } } int main(){ int a,b,p,c; scanf("%d%d%d",&n,&c,&p); ans=n; while(c--){ scanf("%d%d",&a,&b); Addedge(a,b); } // vis[1]=1; while(p--){ scanf("%d",&a); // vis[a]=1; for(int i=0;i<G[a].size();i++) vis[G[a][i]]=1; } dfs(1); printf("%d ",ans); return 0; } /* 4 5 1 1 2 2 3 3 4 2 4 1 3 3 */
1577: [Usaco2009 Feb]庙会捷运Fair Shuttle
数据范围看出来肯定是带个log的。。。。
按照右端点从小到大排序,然后从前往后选取,要用线段树维护一下区间最大值。

#include <bits/stdc++.h> #define ls o<<1,l,mid #define rs o<<1|1,mid+1,r using namespace std; const int maxn=5e5, INF=1e9; struct Node{ int l,r,num; }a[maxn]; bool cmp(Node a,Node b){ return (a.r<b.r || (a.r==b.r && a.l>b.l)); } int v[maxn],lazy[maxn]; void pushdown(int o,int l,int r){ v[o<<1]+=lazy[o]; v[o<<1|1]+=lazy[o]; lazy[o<<1]+=lazy[o]; lazy[o<<1|1]+=lazy[o]; lazy[o]=0; } int query(int o,int l,int r,int L,int R){ if(l>R || r<L) return -1; if(l>=L && r<=R) return v[o]; pushdown(o,l,r); int mid=l+r>>1; return max(query(ls,L,R),query(rs,L,R)); } void add(int o,int l,int r,int val,int L,int R){ if(l>R || r<L) return; if(l>=L && r<=R){v[o]+=val,lazy[o]+=val;return;} int mid=l+r>>1; add(ls,val,L,R); add(rs,val,L,R); v[o]=max(v[o<<1],v[o<<1|1]); } int main(){ int k,n,c; scanf("%d%d%d",&k,&n,&c); for(int i=0;i<k;i++){ scanf("%d%d%d",&a[i].l,&a[i].r,&a[i].num); a[i].r--; } sort(a,a+k,cmp); int Ans=0; for(int i=0;i<k;i++){ int ans=min(c-query(1,1,n,a[i].l,a[i].r),a[i].num); // printf("----- %d %d ",query(1,1,n,a[i].l,a[i].r),ans); Ans+=ans; add(1,1,n,ans,a[i].l,a[i].r); } printf("%d ",Ans); return 0; }