hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
2017-08-02 12:15
537 查看
Kanade’s sum
题目链接:Kanade’s sum官方题解:
其实就是一开始先维护一个满的链表,从小到大遍历x,计算完每一个x后,就把它从链表中删掉,这样链表中存储的始终是>=x的数
代码:
#include<stdio.h> #include<string.h> #include<algorithm> using namespace std; typedef long long LL; const int maxn=5e5+10; int pos[maxn],pre[maxn],nxt[maxn],a[maxn],b[maxn]; int n,k; LL solve(int x) { int s1=0,s2=0; for(int i=x; i&&s1<=k; i=pre[i]) a[++s1]=i-pre[i];//a[]存储的是左边最近的k个>=它的数之间的区间长度(共k个区间) for(int i=x; i<=n&&s2<=k; i=nxt[i]) b[++s2]=nxt[i]-i;//b[]存储的是右边最近的k个>=它的数之间的区间长度(共k个区间) LL ans=0; for(int i=1; i<=s1; ++i) if(k-i+1<=s2) ans+=(LL)a[i]*b[k-i+1]; return ans; } void del(int x)//删除 { pre[nxt[x]]=pre[x]; nxt[pre[x]]=nxt[x]; } int main() { int t,x; scanf("%d",&t); while(t--) { scanf("%d%d",&n,&k); for(int i=1; i<=n; ++i) { scanf("%d",&x); pos[x]=i,pre[i]=i-1,nxt[i]=i+1; } LL ans=0; for(int i=1; i<=n; ++i) { ans+=solve(pos[i])*i; del(pos[i]); } printf("%lld\n",ans); } return 0; }
参考博客:
_Kazusa
相关文章推荐
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- HDU-6058 Kanade's sum - 2017 Multi-University Training Contest - Team 3(思维+模拟链表)
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- hdu 6058 Kanade's sum(链表)(2017 Multi-University Training Contest - Team 3 )
- 2017 Multi-University Training Contest - Team 3 1003(hdu 6058) Kanade's sum(链表)(set)
- HDU 6058 2017 Multi-University Training Contest - Team 3 1003 :Kanade's sum:简单计数问题
- 2017 Multi-University Training Contest 3 && HDOJ 6058 Kanade's sum 【链表模拟】
- HDU 6058 Kanade's sum (链表, 2017 Multi-Univ Training Contest 3)
- 2017 Multi-University Training Contest - Team 3 Kanade's sum