又发现模拟 \(22\) 的总结也咕掉了,现在补上它。。。

似乎又是gg的一场。

以为自己的部分分数打的很全,然而到后面发现自己的树剖打假了

\(\color{green}{\huge{\text{树剖打假???}}}\)

好废啊。。。

然后我的 \(lca\) 就变成了 \(\mathcal O(n)\) 的向上标记法

罪魁祸首:



然后。。。



然而改成:



然后:

原地爆炸。。。

生气。。。

然而并没有什么用。。

部分分数都打不全。。。还是水平问题。。。

d:

利用上一场单调指针的思想,然后我们使用:

双指针 ---摇摆兵

然后就很简单了。。。



#include<bits/stdc++.h>
using std::cout; using std::endl;
#define int long long
#define debug cout<<"debug"<<endl
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; FILE *xinnb1; typedef long long ll;
void openfile() {xinnb1 = freopen("t.txt","r",stdin);} void outfile() {xinnb1 = freopen("o.txt","w",stdout);}
inline int get()
{
int s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 0x7f7f7f7f7f7f7f7f;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
namespace xin
{
class xin_data
{
private:
friend bool operator < (xin_data x,xin_data y)
{
if(x.b xor y.b) return x.b < y.b;
if(x.a xor y.a) return x.a < y.a;
return x.id < y.id;
}
public:
int a,b,id;
}xa[maxn],xb[maxn];
inline bool compa(xin_data x,xin_data y)
{
if(x.a xor y.a) return x.a < y.a;
if(x.b xor y.b) return x.b < y.b;
return x.id < y.id;
}
inline bool compb(xin_data x,xin_data y)
{
if(x.b xor y.b) return x.b < y.b;
if(x.a xor y.a) return x.a < y.a;
return x.id < y.id;
}
bool vis[maxn];
int n,m;
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
int T = get();
while(T--)
{
n = get(); m = get();
try(i,1,n)
{
xa[i].a = get(); xa[i].b = get();
xa[i].id = i; xb[i] = xa[i];
}
std::sort(xa+1,xa+n+1,compa);
std::sort(xb+1,xb+n+1,compb);
try(i,1,m) vis[xa[i].id] = 1;
register int j = 1;
while(vis[xb[j].id]) j++;
register int ans = xa[m+1].a * xb[j].b;
throw(i,m,1)
{
vis[xa[i].id] = false;
if(xa[i] < xb[j])
ans = std::max(ans,xa[i].a * xb[j].b);
else
{
j ++;
while(vis[xb[j].id]) j++;
ans = std::max(xa[i].a * xb[j].b,ans);
}
}
cout<<ans<<endl;
}
return 0;
}
}
signed main() {return xin::main();}

e:

正解是可持久化线段树。

然而还没学。。

然后 \(gg\) 了

然而强者暴力有一万分

就是前提是树剖打对

生气。。。

直接\(89pts\)



%: pragma GCC optimize("Ofast")
%: pragma GCC optimize("inline")
#include<bits/stdc++.h>
using std::cout; using std::endl;
//#define int long long
#define debug cout<<"debug"<<endl
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; FILE *xinnb1; typedef long long ll;
void openfile() {xinnb1 = freopen("t.txt","r",stdin);} void outfile() {xinnb1 = freopen("o.txt","w",stdout);}
inline int get()
{
int s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 2e5+10,inf = 0x7f7f7f7f;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
namespace xin
{
class xin_edge{public:int next,ver;}edge[maxn];
int head[maxn],zhi = 0;
inline void add(int x,int y) {edge[++zhi].ver = y; edge[zhi].next = head[x]; head[x] = zhi;}
int c[maxn],type,n,q;
signed top[maxn],fa[maxn],d[maxn],hson[maxn],siz[maxn];
int p[maxn];
inline int min(int x,int y) {return (x < y ? x : y);}inline int max(int x,int y) {return (x > y ? x : y);}
inline bool pan()
{
double t = (double)clock();
if(t >= 2.4 * CLOCKS_PER_SEC) return false;
return true;
}
#define swap(x,y) (x ^= y ^= x ^= y)
void dfs1(int x,int f)
{
fa[x] = f; d[x] = d[f] + 1; siz[x] = 1;
for(register int i=head[x];i;i=edge[i].next)
{
register int y = edge[i].ver;
if(y == f) continue;
dfs1(y,x); siz[x] += siz[y];
if(siz[y] > siz[hson[x]]) hson[x] = y;
}
}
void dfs2(int x,int t)
{
top[x] = t;
if(hson[x]) dfs2(hson[x],t);
for(register int i=head[x];i;i=edge[i].next)
{
register int y = edge[i].ver;
if(y == fa[x] or y == hson[x]) continue;
dfs2(y,y);
}
}
inline int lca(int x,int y)
{
while(top[x] xor top[y])
{
if(d[top[x]] < d[top[y]]) swap(x,y);
x = fa[top[x]];
}
if(d[x] > d[y]) swap(x,y);
return x;
}
int ans = inf;
inline int abs(int x) {return x > 0 ? x : -x;}
std::bitset<(maxn >> 1)>vis;
void pa(int x,int goal,int r)
{
if(vis[x]) return ;
vis[x] = 1;
ans = min(ans,abs(c[x] - r));
if(x == goal) return;
pa(fa[x],goal,r);
}
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get(); q = get(); type = get();
bool sp1 = 1,sp2 = 1;
try(i,1,n)
{
c[i] = get();
if((c[i] xor c[i-1]) and (i - 1)) sp1 = 0;
}
try(i,1,n-1)
{
register int x = get(),y = get();
add(x,y); add(y,x);
if(x + 1 != y) sp2 = 0;
}
if(sp2)
{
while(q--)
{
register int r = get(),k = get(),allca; ans = inf;
int maxx = -inf,minn = inf;
try(i,1,k) p[i] = get(),maxx = max(maxx,p[i]),minn = min(minn,p[i]);
try(i,minn,maxx)
ans = min(abs(r - c[i]),ans);
printf("%d\n",ans);
}
return 0;
}
dfs1(1,0); dfs2(1,1);
register int pre = 0;
try(que,1,q)
{
register int r = get(),k = get(),allca; ans = inf;
try(i,1,k) p[i] = get();
if(sp1) {printf("%d\n",abs(r - c[1])); continue;}
try(i,1,k)
{
p[i] = (p[i] - 1 + type * pre) % n + 1;
if(i >= 2) allca = lca(p[i],allca);
else allca = p[1];
}
vis = 0;
// cout<<allca<<endl;
try(i,1,k)
{
register int x = p[i];
while(!vis[x] and (allca xor x))
{
vis[x] = 1;
ans = min(ans,abs(r - c[x]));
x = fa[x];
if(!ans) break;
}
if(!pan()) break;
ans = min(ans,abs(r - c[allca]));
}
printf("%d\n",pre = ans);
}
return 0;
}
}
signed main() {return xin::main();}

f:

我不会告诉你我现在只会30pts大暴力的

归并排序大暴力,然后 \(30pts\)

生气



#include<bits/stdc++.h>
using std::cout; using std::endl;
//#define int long long
#define debug cout<<"debug"<<endl
namespace xin_io
{
#define gc() p1 == p2 and (p2 = (p1 = buf) + fread(buf,1,1<<20,stdin),p1 == p2) ? EOF : *p1++
char buf[1<<20],*p1 = buf,*p2 = buf; FILE *xinnb1; typedef long long ll;
void openfile() {xinnb1 = freopen("t.txt","r",stdin);} void outfile() {xinnb1 = freopen("o.txt","w",stdout);}
inline int get()
{
int s = 0,f = 1; register char ch = gc();
while(!isdigit(ch)) {if(ch == '-') f = -1; ch = gc();}while(isdigit(ch)) {s = s * 10 + ch - '0'; ch = gc();}
return s * f;
}
}
using namespace xin_io; static const int maxn = 1e6+10;
#define try(i,a,b) for(register signed i=a;i<=b;++i)
#define throw(i,a,b) for(register signed i=a;i>=b;--i)
namespace xin
{
int a[maxn],r[maxn],n,ans = 0,k,p;
int c[maxn];
void ms(register int s,register int t)
{
register int m,i,j,k;
if(s==t) return;
m = (s+t) >> 1;
ms(s,m); ms(m+1,t);
i = s;j = m+1; k = s;
while (i<=m and j<=t)
{
if (a[i]<=a[j]){r[k] = a[i];i++;k++; }
else{r[k] = a[j];j++;k++;ans += j - k;}
}
while(i<=m){r[k] = a[i];i++; k++;}
while(j<=t){r[k] = a[j];j++;k++;}
for(i=s;i<=t;i++) a[i] = r[i];
}
class xin_data
{
private:
friend bool operator < (xin_data x,xin_data y)
{return (x.f == y.f) ? x.i < y.i : x.f < y.f;}
public:
int i,f;
}d[maxn];
inline short main()
{
#ifndef ONLINE_JUDGE
openfile();
#endif
n = get(); k = get(); p = get();
if(n >= 500000) {cout<<1<<' '<<1<<endl; return 0;}
try(i,1,n) c[i] = get();
try(x,0,(1<<k)-1)
{
try(i,1,n) a[i] = c[i] xor x;
ans = 0;
ms(1,n);
d[x].f = ans; d[x].i = x;
}
std::sort(d,d+(1<<k));
cout<<d[p-1].f<<' '<<d[p-1].i<<endl;
return 0;
}
}
signed main() {return xin::main();}

[考试总结]noip模拟22的更多相关文章

  1. 2021.7.21考试总结[NOIP模拟22]

    终于碾压小熠了乐死了 T1 d 小贪心一波直接出正解,没啥好说的(bushi 好像可以主席树暴力找,但我怎么可能会呢?好像可以堆优化简单找,但我怎么可能想得到呢? 那怎么办?昨天两道单调指针加桶,我直 ...

  2. 5.22考试总结(NOIP模拟1)

    5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...

  3. 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]

    6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...

  4. 5.23考试总结(NOIP模拟2)

    5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...

  5. noip模拟22[d·e·f]

    noip模拟22 solutions 哈哈哈,这次暴力打满直接190,其实不到哈哈哈,187.. 这次的题暴力极其好打,但是正解确实不简单... 打了好久才改完这个题,改完的时候爽暴了 这些一个字母的 ...

  6. 2021.9.17考试总结[NOIP模拟55]

    有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...

  7. [考试总结]noip模拟23

    因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...

  8. 2021.9.22考试总结[NOIP模拟59]

    T1 柱状图 关于每个点可以作出两条斜率绝对值为\(1\)的直线. 将绝对值拆开,对在\(i\)左边的点\(j\),\(h_i-i=h_j-j\),右边则是把减号换成加号. 把每个点位置为横坐标,高度 ...

  9. 「考试」noip模拟9,11,13

    9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...

随机推荐

  1. WEB 页面认证

    1:安装htpasswd工具生成加密文件 安装工具 # yum install httpd-tools # htpasswd -cm /etc/httpd/passwd/password useraN ...

  2. Mac下安装及配置Appium环境

    candiceli   Mac下安装及配置Appium环境 我是小白,自己研究appium好几周了. 一开始按照同事这篇文章设置Mac下的环境,http://www.cnblogs.com/tangd ...

  3. 【Azure 机器人】微软Azure Bot 编辑器系列(3) : 机器人对话流中加入帮助和取消按钮功能 (The Bot Framework Composer tutorials)

    欢迎来到微软机器人编辑器使用教程,从这里开始,创建一个简单的机器人. 在该系列文章中,每一篇都将通过添加更多的功能来构建机器人.当完成教程中的全部内容后,你将成功的创建一个天气机器人(Weather ...

  4. Oracle 审计文件

    Oracle审计功能: Oracle11g推出了审计功能,但这个功能会针对很多操作都产生审计文件.aud,日积月累下来这些文件也很多,默认情况下,系统为了节省资源,减少I/0操作,其审计功能是关闭的 ...

  5. 安聊服务端Netty的应用

    Netty简介 Netty是一个面向网络编程的Java基础框架,它基于异步的事件驱动,并且内置多种网络协议的支持,可以快速地开发可维护的高性能的面向协议的服务器和客户端. 安聊简介 安聊是一个即时聊天 ...

  6. excel VBA构造正则函数(双参数)

    Function zhengze(ze As String, Rng As Range)    Set regx = CreateObject("vbscript.regexp") ...

  7. 佛祖保佑永无BUG 神兽护体 代码注释(各种版本)

    佛祖保佑 永无BUG /* _ooOoo_ o8888888o 88" . "88 (| -_- |) O\ = /O ____/`---'\____ .' \\| |// `. ...

  8. 创建Cloudflare CDN

    背景说明: XX全球版项目CDN, 原有改之前:主CDN为Akamai,备CDN为Cloudflare. 计划改之后:主CDN为Cloudflare,备CDN为Akamai. 原因:Akamai CD ...

  9. .Net Core 常用开发工具(IDE和运行时、Visual Studio插件、Visual Studio Code插件)

    IDE和运行时 组件名 描述 可选版本 推荐版本 Visual Studio Community 社区免费版 For Visual Studio 2017 For Visual Studio 2019 ...

  10. POJ 1584 A Round Peg in a Ground Hole 判断凸多边形 点到线段距离 点在多边形内

    首先判断是不是凸多边形 然后判断圆是否在凸多边形内 不知道给出的点是顺时针还是逆时针,所以用判断是否在多边形内的模板,不用是否在凸多边形内的模板 POJ 1584 A Round Peg in a G ...