关于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的更多相关文章

  1. MySQL,MariaDB:Undo | Redo [转]

    本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...

  2. iOS: 为画板App增加 Undo/Redo(撤销/重做)操作

    这个随笔的内容以上一个随笔为基础,(在iOS中实现一个简单的画板),上一个随笔实现了一个简单的画板:   今天我们要为这个画板增加Undo/Redo操作,当画错了一笔,可以撤销它,或者撤销之后后悔了, ...

  3. 【msql】关于redo 和 undo log

    InnoDB 有两块非常重要的日志,一个是undo log,另外一个是redo log,前者用来保证事务的原子性以及InnoDB的MVCC,后者用来保证事务的持久性.和大多数关系型数据库一样,Inno ...

  4. HDOJ 1008. Elevator 简单模拟水题

    Elevator Time Limit: 2000/1000 MS (Java/Others)    Memory Limit: 65536/32768 K (Java/Others)Total Su ...

  5. [转]undo log与redo log原理分析

    数据库通常借助日志来实现事务,常见的有undo log.redo log,undo/redo log都能保证事务特性,这里主要是原子性和持久性,即事务相关的操作,要么全做,要么不做,并且修改的数据能得 ...

  6. [转]MySQL日志——Undo | Redo

    本文是介绍MySQL数据库InnoDB存储引擎重做日志漫游 00 – Undo LogUndo Log 是为了实现事务的原子性,在MySQL数据库InnoDB存储引擎中,还用Undo Log来实现多版 ...

  7. 【转】ORACLE的REDO与UNDO

    一.什么是redo?redo:oracle在在线或者归档重做日志文件中的记录的信息,外以出现失败时可以利用这些数据来"重放"事务.每个oracle数据都至少有二个在线重做日志组,每 ...

  8. BULK操作减少redo实验

    建表: create table sm_histable ( sm_id ), sm_subid ), service_type ), orgton ), orgnpi ), destton ), d ...

  9. 从Undo,Redo谈命令模式

    一般的应用软件中,通常会提供Redo和Undo的操作,比如Paint.NET中的动作面板,Word中的撤销重做,一般我们按Ctrl-Z即可回退到上次操作. 要实现上面的这一功能,最直观的想法就是,我们 ...

  10. 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 ...

随机推荐

  1. 括号匹配——cf1095E

    正解应该是求后缀和前缀 但是多情况讨论好像也能过.. 大概分为: 首先排除不能改的情况 1.改左括号 2.改右括号 /* 将一个位置的括号反过来,使原序列变成合法序列 */ #include<b ...

  2. 杂项-日志:日志(log)

    ylbtech-杂项-日志:日志(log) 1.返回顶部 1. 概述 网络设备.系统及服务程序等,在运作时都会产生一个叫log的事件记录:每一行日志都记载着日期.时间.使用者及动作等相关操作的描述. ...

  3. Installer - Eclipse配置Data Source Explorer

    一.配置Oracle数据库连接 1.打开配置窗口 在[window]菜单中的[show windows]选择[other],在弹出的窗口中选择[Data Source Explorer]进行数据数据库 ...

  4. Docker系列(五):Docker网络机制(上)

    Linux路由机制打通网络 路由机制是效率最好的 docker128上修改Docker0的网络地址,与docker130不冲突 vi /usr/lib/systemd/system/docker.se ...

  5. JS 变量的数据类型 运算符

    JS中变量的类型有:数值型.字符型.布尔型.undefined.null.array.object.function 1.数值型:可以进行算术运算的(加.减.乘.除) 数值型包括:整型(整数)和浮点型 ...

  6. 19.SimLogin_case08

    # 模拟登录微博 import time import base64 import rsa import binascii import requests import re import rando ...

  7. TIB、TEB 信息

    https://en.wikipedia.org/wiki/Win32_Thread_Information_Block 这是重点 Position Length Windows Versions D ...

  8. tomcat下面部署多个项目

    最近需要部署多个项目,我目前所知道的两种方法,第一种是一个tomcat部署一个项目,需要布置多个tomcat就可以部署多个项目.第二种就是一个tomcat下面部署多个项目. 首先我们先来说说两种的优劣 ...

  9. C++ 系列:typedef 和 #define 的区别

    总结一下typedef和#define的区别 1.概念 #define 它在编译预处理时进行简单的替换,不作正确性检查.它是预处理指令. typedef 它在自己的作用域内给一个已经存在的类型一个别名 ...

  10. 六. Default arguments 参数默认值

    示例: 注意点:函数是会默认声明参数变量的,所以不需要再重新声明一次,否则会报错 错误示例如下: 函数参数的传值方法: 需要注意的是:如果要给第二个参数传值,那第一个参数要传undefined,而不能 ...