1008-Redo
关于flag,都立下了
T1
考试的时候就觉得是贪心,但是不会反悔emm……
于是正解就是一个堆优化可反悔的贪心=。=
每次找前面最小的,于是是小根堆。
我们在交易的时候发现后面的一个可以更优。
于是可以发现$x_i-x_j+x_j-x_k=x_i-x_k$
这样就可以反悔,如果发现$k$可以更优,就把$j$退回去,
所以每次决策完,直接压堆或是更新,并把两个数一起放进去。
一个用来退货,另一个用来再买。
#include <iostream>
#include <cstring>
#include <cstdio>
#include <queue>
#define N 111111
#define LL long long using namespace std; priority_queue<int,vector<int>,greater<int> >q;
LL pn,arr[N],ans=0;
int main(){
scanf("%lld",&pn);
for(int i=1;i<=pn;i++)
scanf("%lld",arr+i);
for(int i=1;i<=pn;i++){
if(q.empty())q.push(arr[i]);
else if(q.top()<arr[i]){
ans+=arr[i]-q.top();
q.pop();
for(int j=0;j<2;j++)
q.push(arr[i]);
}
else q.push(arr[i]);
}
printf("%lld\n",ans);
}
T2
一个数学题,但是转换成莫队了。
打个样辉三角就可以知道这两个柿子。
$$\begin{align}
S_{n,m}=S_{n,m-1}+C_n^m \tag 1\\
S_{n,m}=S_{n-1,m} \times 2 - C_{n-1}^m \tag 2
\end{align}$$
我没写错吧
于是化为序列询问。
从$[m,n]$向$[m+1,n],[m-1,n],[m,n+1],[m,n-1]$移动。
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#define N 111111
#define LL long long using namespace std; const int Mod=1e9+7;
struct Query{
int n,m;
int id;
}qs[N];
int qn;
LL ans[N],fac[N],inv[N];
int inp[N],pl; inline int get_part(int id){
return (id-1)/pl+1;
}
LL ppow(LL a,LL b){
LL res(1);
while(b){
if(b&1)res=res*a%Mod;
a=a*a%Mod;
b>>=1;
}
return res;
}
void prerun(){
pl=sqrt(100000)+1;
for(int i=0;i<=100000;i++)
inp[i]=get_part(i);
fac[0]=inv[0]=1;
for(int i=1;i<=100000;i++){
fac[i]=fac[i-1]*i%Mod;
inv[i]=ppow(fac[i],Mod-2);
}
}
LL C(int n,int m){
return fac[n]*inv[m]%Mod*inv[n-m]%Mod;
}
int main(){
// freopen("1.in","r",stdin);
// freopen("wa.out","w",stdout);
prerun();
scanf("%*d%d",&qn);
for(int i=1;i<=qn;i++){
scanf("%d%d",&qs[i].n,&qs[i].m);
qs[i].id=i;
}
sort(qs+1,qs+qn+1,[](const Query &x,const Query &y){return inp[x.n]<inp[y.n]||(inp[x.n]==inp[y.n]&&(inp[x.n]&1?x.m<y.m:x.m>y.m));});
int nn=1,nm=1;//S(0,0)
LL nans=2;
for(int i=1;i<=qn;i++){
while(nn<qs[i].n){
nans=(nans*2%Mod-C(nn,nm)+Mod)%Mod;
nn++;
}
while(nn>qs[i].n){
nans=(nans+C(nn-1,nm))%Mod*inv[2]%Mod;
nn--;
}
while(nm<qs[i].m){
nans+=C(nn,nm+1);
nans%=Mod;
nm++;
}
while(nm>qs[i].m){
nans-=C(nn,nm);
nans=(nans+Mod)%Mod;
nm--;
}
ans[qs[i].id]=nans%Mod;
}
for(int i=1;i<=qn;i++)
printf("%lld\n",ans[i]);
}
T3
考试的时候一直没看见边长至少有一个是$1$……
于是按$x,y$分别排序并建边,具体实现……没打完。
我想的是用两个$set$维护。
有人要部分代码么……啥都没有
/*CECECECECECECECE*/
#include <algorithm>
#include <iostream>
#include <cstring>
#include <cstdio>
#include <set>
#define N 111111 using namespace std;
struct XBLOCK{
int lx,ly,rx,ry;
int id;
XBLOCK(int a,int b,int c,int d,int e):lx(a),ly(b),rx(c),ry(d),id(e){}
friend operator < (const XBLOCK &a,const XBLOCK &b){
if(a.lx==b.lx)
return a.ly<b.ly;
return a.lx<b.lx;
}
};
struct YBLOCK{
int lx,ly,rx,ry;
int id;
YBLOCK(int a,int b,int c,int d,int e):lx(a),ly(b),rx(c),ry(d),id(e){}
friend operator < (const YBLOCK &a,const YBLOCK &b){
if(a.ly==b.ly)
return a.lx<b.lx;
return a.ly<b.ly;
}
};
set<XBLOCK>xb;
set<YBLOCK>yb;
int lines,cols,bn,qn;
int ans[N];
int pre[N];
int fa[N];
void prerun(){
for(int i=1;i<=bn;i++)
fa[i]=i;
}
int faind(int x){
if(x!=fa[x])fa[x]=faind(fa[x]);
return fa[x];
}
void unite(int a,int b){
a=faind(a);
b=faind(b);
fa[a]=b;
}
int main(){
int lx,ly,rx,ry,opt,qd;
scanf("%*d%d%d%d%d",&lines,&cols,&bn,&qn);
prerun();
for(int i=1;i<=bn;i++){
scanf("%d%d%d%d",&lx,&ly,&rx,&ry);
pre[lx-1]-=ry-ly+1;
pre[ly]+=ry-ly+1;
xb.insert(XBLOCK(lx,ly,rx,ry,i));
yb.insert(YBLOCK(lx,ly,rx,ry,i));
}
for(int i=1;i<=lines;i++)
pre[i]+=pre[i-1];
for(int i=1;i<=lines;i++)
pre[i]+=pre[i-1];
for(auto i:xb){
if(i.lx==1){
auto f=yb.lower_bound(i.lx,i.ly-1,-1,-1),
t=yb.lower_bound(i.rx+1,i.ly-1,-1,-1);
for(auto i=f;i!=t;i++){
i->id
}
continue;
}
auto xf=xb.lower_bound(XBLOCK(i.lx-1,i.ly,-1,-1)),
xt=xb.lower_bound(XBLOCK(i.lx-1,i.ry+1,-1,-1));
for(auto i=f;i!=t;i++){ }
auto yf=yb.lower_bound(YBLOCK()),
yt=yb.lower_bound(YBLOCK());
for(auto i=f;i!=t;i++){ }
}
for(int i=1;i<=qn;i++){
scanf("%d%d",&opt,&qd);
if(opt)
printf("%d\n",ans[qd]);
else
printf("%d\n",pre[qd]);
}
return 0;
}
1008-Redo的更多相关文章
- MySQL,MariaDB:Undo | Redo [转]
本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...
- iOS: 为画板App增加 Undo/Redo(撤销/重做)操作
这个随笔的内容以上一个随笔为基础,(在iOS中实现一个简单的画板),上一个随笔实现了一个简单的画板: 今天我们要为这个画板增加Undo/Redo操作,当画错了一笔,可以撤销它,或者撤销之后后悔了, ...
- 【msql】关于redo 和 undo log
InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性.和大多数关系型数据库一样,Inno ...
- HDOJ 1008. Elevator 简单模拟水题
Elevator Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Su ...
- [转]undo log与redo log原理分析
数据库通常借助日志来实现事务,常见的有undo log.redo log,undo/redo log都能保证事务特性,这里主要是原子性和持久性,即事务相关的操作,要么全做,要么不做,并且修改的数据能得 ...
- [转]MySQL日志——Undo | Redo
本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...
- 【转】ORACLE的REDO与UNDO
一.什么是redo?redo:oracle在在线或者归档重做日志文件中的记录的信息,外以出现失败时可以利用这些数据来"重放"事务.每个oracle数据都至少有二个在线重做日志组,每 ...
- BULK操作减少redo实验
建表: create table sm_histable ( sm_id ), sm_subid ), service_type ), orgton ), orgnpi ), destton ), d ...
- 从Undo,Redo谈命令模式
一般的应用软件中,通常会提供Redo和Undo的操作,比如Paint.NET中的动作面板,Word中的撤销重做,一般我们按Ctrl-Z即可回退到上次操作. 要实现上面的这一功能,最直观的想法就是,我们 ...
- Undo/Redo for Qt Tree Model
Undo/Redo for Qt Tree Model eryar@163.com Abstract. Qt contains a set of item view classes that use ...
随机推荐
- Hadoop 与 Spark 对比
Hadoop进行海量数据分析,MR频繁落地,IO操作,计算时间就拉长.由于这种设计影响,计算过程中不能进行迭代计算.造成网络节点数据传输. Spark从理念上就开始改变.应用scala特点解决上面的核 ...
- threading线程例子 (27-08)
利用阻塞的时间空闲去执行另一个子线程 import threading from time import ctime, sleep def music(func): for i in range(2) ...
- 基础数据类型汇总补充,python集合与深浅拷贝
一.基础数据类型汇总补充 1.查看str所有方法方式 2.列表:在循环中删除元素,易出错或报错(飘红) lis = [11,22,33,44,55] # for i in range(len(lis) ...
- Censored! POJ - 1625 AC自动机+大数DP
题意: 给出一n种字符的字典,有p个禁用的单词, 问能组成多少个不同的长度为m的合法字符串.(m<=50) 题解: 是不是个我们之前做的题目非常非常像,题意都一样. 直接将上次写的AC自动机+矩 ...
- NEO4J全文检索架构
NEO4J全文检索架构 一.有大量存量数据(亿级以上)(并长期有增量数据进入) 二.无大量存量数据或者少量存量数据(或全部为增量数据) 三.架构方案选择优先级 以下方案,是根据实践总结的基于NEO4J ...
- selenium基础(脚本模块化)
selenium基础(脚本模块化)
- CSS - 选择器相关
1. 标签选择器 /* 标签选择器 : 会将样式作用在当前网页所有的指定标签上 标签名 { 样式名1: 样式值1; 样式名2: 样式值2; ...... } */ table { width: 300 ...
- 通过Amazon AWS 十分钟搭建私人主机 自由的不要不要的
首先承认有点标题党了,当时自己搞的时候可不止十分钟,好吧,我承认是坑太多了,所以特意开了一篇博文,就是要准备尝试的和我一样的菜鸟们,可以真正的十分钟搞定. 当然高手可能用不上十分钟. 首先,就是 ...
- iOS开发CGImage.h简介
1.前因 由于剪切图片用到下面方法,此方法属于CGImage.h中,通过创建CGImageRef像素位图,可以通过操作存储的像素位来编辑图片. /* Create an image using the ...
- Android之GridLayout网格布局
1.相关属性 GridLayout网格布局是4.0之后引入的布局方式! android:columnCount="4" //设置列数(4列) android:rowCount=&q ...