您的位置:首页 > 其它

Educational Codeforces Round 15 套题

2016-07-30 15:54 465 查看
这套题最后一题不会,然后先放一下,最后一题应该是大数据结构题

A:求连续最长严格递增的的串,O(n)简单dp

#include <cstdio>
#include <cstdlib>
#include <cstring>
#include <cmath>
#include <iostream>
#include <algorithm>
#include <map>
#include <queue>
#include <vector>
using namespace std;
typedef  long long LL;
const int N = 1e5+5;
const int INF = 2e9;
struct Node{
int v,mn;
LL sum;
}f
[40];
LL retsum
,k;
int n,retmin
,cur
;
void solve(){
for(int j=0;(1ll<<j)<=k;++j)if(k&(1ll<<j)){
for(int i=0;i<n;++i){
retsum[i]+=f[cur[i]][j].sum;
if(retmin[i]==-1)retmin[i]=f[cur[i]][j].mn;
else retmin[i]=min(retmin[i],f[cur[i]][j].mn);
cur[i]=f[cur[i]][j].v;
}
}
for(int i=0;i<n;++i)
printf("%I64d %d\n",retsum[i],retmin[i]);
}
int main(){
scanf("%d%I64d",&n,&k);
for(int i=0;i<n;++i)scanf("%d",&f[i][0].v),cur[i]=i,retmin[i]=-1;
for(int i=0;i<n;++i)scanf("%d",&f[i][0].mn),f[i][0].sum=f[i][0].mn;
for(int j=1;(1ll<<j)<=k;++j){
for(int i=0;i<n;++i){
f[i][j].v=f[f[i][j-1].v][j-1].v;
f[i][j].sum=f[i][j-1].sum+f[f[i][j-1].v][j-1].sum;
f[i][j].mn=min(f[i][j-1].mn,f[f[i][j-1].v][j-1].mn);
}
}
solve();
return 0;
}


View Code
F:不会,看了看别人的代码,并不能看懂,还是太弱
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: