摘要: 题目大意:给定n个数的序列,让我们找前面k个区间的最大值之和,每个区间长度为n/k,如果有剩余的区间长度不足n/k则无视之。现在让我们找最小的k使得和严格大于m。题解:二分k,然后求RMQ检验。ST算法:#include #include #include using namespace std; const int maxn=200010; int d[maxn][30]; int a[maxn]; void init_rmq(int n){ for(int i=0;im)return true; } return false; } int... 阅读全文
posted @ 2014-03-02 16:49 forever97 阅读(174) 评论(0) 推荐(0) 编辑
摘要: //初始化void init_rmq(int n){ for(int i=0;i<n;i++)d[i][0]=a[i]; for(int j=1;(1<<j)<=n;j++){ for(int i=0;i+(1<<j)-1<n;i++) d[i][j]=max(d[i][j-1],d[i+(1<<(j-1))][j-1]); } } //查询int query_rmq(int L,int R){ int k=0; while(1<<(k+1)<=R-L+1)k++; return max(d[... 阅读全文
posted @ 2014-03-02 16:29 forever97 阅读(497) 评论(0) 推荐(0) 编辑
摘要: 题解:求树上最短路,所以直接LCA:倍增求LCA:#include int f[10010][18];int s[10010],d[10010],from[10010];int g[10010],nxt[20010],edv[20010],edw[20010],cnt;bool vis[10010];int q,a,b,e,n,m,i,j,x,y,tmp;void swap(int &a,int &b){int c=a;a=b;b=c;}void add(int u,int v,int w){ edv[++cnt]=v;edw[cnt]=w; nxt[cnt]=g[u];g[u 阅读全文
posted @ 2014-03-02 15:31 forever97 阅读(158) 评论(0) 推荐(0) 编辑
摘要: 阅读全文
posted @ 2014-03-02 12:50 forever97 阅读(249) 评论(0) 推荐(0) 编辑