时间之主 解题报告
来源:互联网 发布:剑三重置成女体型数据 编辑:程序博客网 时间:2024/05/01 21:20
时间之主
Timer.c/cpp/pas
TimerAugust掌握着无尽时间里不同时间轴的平行世界.每一个瞬间都会有
新的世界被创造出来,其中一些世界被创造出来的根源就是已有生灵的信仰.无论
是尸魂界幻想乡数码世界…只要有足够的信仰,世界之心就会抓取这些信仰并用
来构建成新的世界.不同世界有不同编号和不同信仰值.
现在 TimerAugust想知道对世界 1..n,有信仰值 a
1
..a
n
,其中那些i < j < … < k,ai > aj > … > ak的世界序列的数量.很不幸,你被他选中了.现在你需要在2s内回答他的问题(对能掌控时间的 Timer 来说 2 秒钟已经很长很长了),否则就要被丢到时间裂缝里变成一个永远静止的艺术品了.
输入 Input
第一行两个数 n,k,n 表示世界数目,k 说明你要找 k 元组数目.
接下来 n 行每行一个数,表示每个世界的信仰值.(不超过 int范围)
输出 Output
输出那个数目.(出题人保证答案炸 INT64 的数据被丢掉了 www)
数据范围 Hint
对 100%的数据,1≤n≤100000,1≤k≤10.
对 30%的数据,1≤n≤20.(由于出题人非常随(lan)性(duo)难以保证暴力能拿到全部暴力分…)
Sample Input Sample Output
4 3 4
10 8 3 1
这显然是一道水题,不过出题人的标算非常神。原来树状数组还可以反着用,求后缀和!就是把修改的路线和求和的路线反一下,就相当于是把标记留在了上面,然后询问的时候再去捡标记。
#include<cstdio>#include<cstring>#include<cmath>#include<iostream>using namespace std;#define Mod 1000000007#include<algorithm>void in(int &x){ char c=getchar(); bool flag=0; for(;c<'0'||c>'9';c=getchar()) if(c=='-') flag=1; x=0; for(;c>='0'&&c<='9';c=getchar())x=x*10+c-'0'; if(flag)x=-x;}int f[15][100005];int hash[100005],a[100005],htot;int query(int k,int x){ int ans=0; for(;x;x-=x&-x)ans=(ans+f[k][x])%Mod; return ans;}int update(int k,int x,int A){ for(;x<htot;x+=x&-x)f[k][x]=(f[k][x]+A)%Mod;}int main(){ freopen("timer.in","r",stdin); freopen("timer.out","w",stdout); int n,k,i,j; in(n),in(k); if(k==1){ puts("0"); return 0; } for(i=1;i<=n;++i)in(a[i]),hash[i]=a[i]; sort(hash+1,hash+n+1); htot=unique(hash+1,hash+n+1)-hash; for(i=n;i;--i)a[i]=lower_bound(hash+1,hash+htot,a[i])-hash; for(i=n;i;--i){ update(1,a[i],1); for(j=2;j<=k;++j)update(j,a[i],a[i]>1?query(j-1,a[i]-1):0); } printf("%d\n",query(k,htot-1));}
0 0
- 时间之主 解题报告
- 解题报告之DisjointSet
- 解题报告之 非诚勿扰
- Nightmare之BFS解题报告
- Asteroids之BFS解题报告
- 解题报告之 字频统计
- 解题报告之 幸运数字
- 解题报告 之 UVA1347 Tour
- 解题报告 之 HDU4289 Control
- 解题报告 之 HDU4292 Food
- 解题报告 之 SOJ4426 Counting_3
- 解题报告 之 POJ1201 Intervals
- 解题报告 之 POJ1149 Pigs
- 解题报告 之 SGU326 Perspective
- 解题报告 之 UVA563 Crimewave
- 解题报告 之 POJ3281 Dining
- 解题报告 之 ZOJ2332 Gems
- 解题报告 之 POJ3041 Asteroids
- 结构体浅谈
- 从oracle中导出数据表 —— 使用命令行
- java问题查找------从源头查找
- 如何将Mac OS X10.9下的Python2.7升级到最新的Python3.3
- Android入门(13)——GridView使用汇总
- 时间之主 解题报告
- senaphore
- 文章标题
- 详解Spring MVC 4常用的那些注解
- 【Codeforces#311】 div.2 C--E
- 解决Android5.0 ListView快速滚动后,接近顶部时滚动方向反向的bug
- 【玩转Excel】Oracle PLSQL处理生成XLSX文件
- LeetCode211:Add and Search Word - Data structure design
- javaSE学习笔记之集合