2017.9.24 虔诚的墓主人 思考记录
这个题是纯信息处理题、
首先要明白,对墓地进行枚举是会T的,需要对常青树进行枚举
所以枚举的顺序也要注意:一定要按某种顺序
然后要明白,每一个常青树会对列和行都造成影响,对答案有贡献的点只会在两个点之间
所以可以枚举区间,然后看区间满足两个条件的个数
所以可以用类似线段树dp的思想,一遍查一边改,同时枚举的时候增加/消除影响,就可以做了
码:
#include<iostream>
#include<cstdio>
#include<algorithm>
#include<map>
using namespace std;
#define N 100005
#define ll long long
#define P 2147483648
#define zuo o<<1,l,mid
#define you o<<1|1,mid+1,r
ll he[N<<2],lie[N],tong[N],a,b,c,x,y,k,jc[N],ni[N],n,m,g,tong2[N],jishu;
map<int,int>dui,dui2;
ll ans,lin,zhs[N][15];
struct la
{ll x,y;
}s[N];bool cmp(la a,la b)
{
return a.y<b.y;
}
bool cmp2(la a,la b)
{if(a.x!=b.x)
return a.x<b.x;else return a.y<b.y;
}void up(ll o)
{
he[o]=(he[o<<1]+he[o<<1|1])%P;
}void cha(ll o,ll l,ll r)
{if(a<=l&&r<=b){lin+=he[o];lin%=P;return;}ll mid=(r+l>>1);
if(a<=mid)cha(zuo);
if(b>mid)cha(you);}
ll C(ll a,ll b)
{if(a<b)return 0;return zhs[a][b];
}void gai(int o,int l,int r)
{if(l==r){he[o]=1ll*C(tong[c]-lie[c],k)*C(lie[c],k)%P;return ; }int mid=(l+r)>>1;if(a<=mid)gai(zuo);if(b>mid)gai(you);up(o);
}int main()
{int i,j;scanf("%lld%lld%lld",&n,&m,&g);n=g;zhs[0][0]=1;for(i=1;i<=g;i++){scanf("%lld%lld",&s[i].x,&s[i].y); }scanf("%lld",&k);for(i=1;i<=n;i++)
{zhs[i][0]=1;
for(j=1;j<=k;j++)
{zhs[i][j]=1ll*zhs[i-1][j]+zhs[i-1][j-1]%P;
// cout<<zhs[i][j];
}
//cout<<endl;
}sort(s+1,s+1+n,cmp);for(i=1;i<=n;i++){dui[s[i].y]=i;}for(i=1;i<=n;i++){tong[dui[s[i].y]]++; }sort(s+1,s+1+n,cmp2);for(i=1;i<=n;i++){dui2[s[i].x]=i;}for(i=1;i<=n;i++){tong2[dui2[s[i].x]]++; }for(i=1;i<=n;i++){if(s[i].x==s[i-1].x&&i!=1)//在同一行 {++jishu;a=dui[s[i-1].y]+1;b=dui[s[i].y]-1;lin=0;if(a<=b)cha(1,1,n);//统计区间答案 if(lin>0){ans+=lin*C(jishu-1,k)%P*C(tong2[dui2[s[i].x]]-jishu+1,k); //夹两边 ans%=P;}}else{jishu=1; } lie[dui[s[i].y]]++; a=b=c=dui[s[i].y];gai(1,1,n); } printf("%lld",(ans+P)%P);
}
2017.9.24 虔诚的墓主人 思考记录相关推荐
- 2017.3.24 分裂游戏 思考记录
事先说明:这不是好题解,这只是思考记录 同机房的xp都学博弈了.. 感觉还是学学看吧 先来看一下简单的nim: 题目: Alice和Bob放置了N堆不同的石子,编号1..N,第i堆中有A[i]个 ...
- 2017.10.24 上升序列 思考记录
终于有会做的题了... 一开始想用正常的lis ,然后从前往后扫, 由于最优查询区间在序列上是按顺序单调递增的,所以想记录每个点取哪个值跳到哪,这样是n*m logn的 然后发现既然是单调递增的那直接 ...
- 2017.10.7 括号序列 思考记录
这个题看起来很简单,但细节比较麻烦.参考完别人的代码后才想出自己的解法的.. 一开始认为已匹配的括号是可以直接消的,所以就只维护了两个变量 但还有区间取反.. 由于和已配对的括号的顺序有关,所以不是很 ...
- 2017.9.28 约数研究 思考记录
这个题一开始可能会想复杂, 然而它需要对答案的贡献进行归类 可以发现,一个约数对其倍数的数贡献是一样的,,所以可以考虑离散 所以直接对于每个数不好求,就可以考虑每个约数的贡献 而每个约数i就有n/i个 ...
- 2017.5.11 道路修建 思考记录
这个线段树一眼秒了(主要是有前面的思考经验) 就是维护两个列对应线段上的形态.,比较好想的 但数据结构题有个特点--使你知道结构也不会做----会做也会很大概率爆零.... 所以数据结构题必须 小数据 ...
- 2017.5.9 积木大赛 思考记录
为什么要把这个题放上来?因为这个题还是很有代表性的 首先必须要跳出模拟的思考: 可以忽视每一步具体的操作,直接看目标,这样就会总结出一些规律: 连续上升或连续下降的序列次数一定是最大值,因为每次都可以 ...
- 2017.4.25 解方程 思考记录
这个题好乱啊..n*m就会炸,每个数还都可能是10^10000..这n*ai tm读进去都要10^6效率 . 一般这种似乎没有任何数论定理的东西范围还这么变态只能考虑随机化算法了.. 似乎可以用取模 ...
- 2017.3.29 报表统计 思考记录
有生之年第一道浙江省选题(虽然历史久远并且很水) 记录每个位置数列的左端点和右端点 维护两颗splay 一颗维护全局最小差值,一颗维护相邻最小差值 对于全局splay:每次插入时记录路径取差值mi ...
- 2017.3.6 地精部落 思考记录
其实这个题第一眼是没有任何思路的 强行无视题解,经过漫长的找规律,终于推出了一个可行的方法: f[i][0/1]i表示最高位的数字,0表示开始是上升,1表示开始是下降. 为什么会推出这个? 1.因为所 ...
最新文章
- PyTorch学习之六个学习率调整策略
- Redis学习(3)-redis启动
- JS双向数据绑定的原理介绍
- 程序员的工作,四种情景的处理
- 蓝桥杯评分标准_蓝桥杯比赛要求
- mysql查询出来的数据用连接_mysql – 使用查询从连接的表中检索数据
- Windows环境下安装React Native开发环境----记一次填坑过程
- Loj #2568. 「APIO2016」烟花表演
- Bailian2734 十进制到八进制(POJ NOI0113-45)【进制】
- [2019杭电多校第八场][hdu6667]Roundgod and Milk Tea
- OpenJDK8和OpenJDK8u的差异
- VOS3000 8.05安装及源码
- [LoadRunner]LR11安装或破解时报错的解决方法
- c语言- 负号运算符,C语言运算符盘点,C语言运算符知识点讲解
- 华为eNSP下载与安装
- Excel怎么快速删除隐藏区域
- 人脸识别访客系统解决方案
- python基础课程讲解基本语法常见运算符以及结构语句
- 年底了,该对自己说说总结的话了
- Scrapy豆瓣爬虫 爬取用户以及用户关注关系
热门文章
- 红橙Darren视频笔记 OKHttp基本使用 对http框架进行封装 链式调用
- Think in Java第四版 读书笔记1
- Android笔记 fragment入门 静态加载fragment
- 机器学习十大经典算法之AdaBoost
- 【mysql问题】can't connect to mysql server on 'localhost' (10060)
- php微信个性化菜单,微信公众平台新增个性化菜单接口,实现公众号
- 拾取物品怎么实现_H5接住掉落物品小游戏js实现思路(抛砖引玉)
- ajax js java省市三级联动菜单,AJAX省市区三级联动下拉菜单(java版)
- sas 文件传输 本地 服务器,SLIM SAS SFF-8654服务器转换线让传输更容易!
- cdr 表格自动填充文字_PS那些好用到哭的新手小技巧(1)——如何快速去除文字图片的水印或背景文字?...