又发现模拟 \(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. Linkerd 2.10(Step by Step)—1. 将您的服务添加到 Linkerd

    为了让您的服务利用 Linkerd,它们还需要通过将 Linkerd 的数据平面代理(data plane proxy)注入到它们服务的 pod 中,从而进行网格化. Linkerd 2.10 中文手 ...

  2. 【NX二次开发】体素特征相关函数(块、柱、锥、球)

    NX Open允许用户创建和查询所有基本体素特征,通过API函数建立基本体素特征返回的是相应的特征标识,如果需要可以通过函数UG_MODL_ask_feat_body()获得特征对应的实体对象标识.基 ...

  3. Java中,一个存在十几年的bug...

    今天,分享一个JDK中令人惊讶的BUG,这个BUG的神奇之处在于,复现它的用例太简单了,人肉眼就能回答的问题,JDK中却存在了十几年.经过测试,我们发现从JDK8到14都存在这个问题. 大家可以在自己 ...

  4. 搞清楚Spring事件机制后:Spring的源码看起来简单多了

    本文主讲Spring的事件机制,意图说清楚: 什么是观察者模式? 自己实现事件驱动编程,对标Spring的事件机制 彻底搞懂Spring中的事件机制,从而让大家 本文内容较长,代码干货较多,建议收藏后 ...

  5. 多图:一文带你入门掌握JVM所有知识点

    本JVM系列属于本人学习过程当中总结的一些知识点,目的是想让读者更快地掌握JVM相关的知识要点,难免会有所侧重,若想要更加系统更加详细的学习JVM知识,还是需要去阅读专业的书籍和文档. 本文主题内容: ...

  6. Manacher(马拉车)————O(n)回文子串

    Manacher 一.背景 1975年,Manacher发明了Manacher算法(中文名:马拉车算法),是一个可以在O(n)的复杂度中返回字符串s中最长回文子串长度的算法,十分巧妙. 让我们举个栗子 ...

  7. 学习JDK源码(二):Integer

    最近没有好好保持学习的好习惯,该打. 天天忙,感觉都不知道在干嘛.真的厌倦了普通的Java代码,还是想学点新技术. 用了这么久的Java,最常用的数据类型肯定是Int了,而他的包装类Integer用的 ...

  8. [UWP] WinUI 2.6 使用指南

    2021年6月24日,Windows 11 正式对外发布,对于UWP开发者来说,这一天同样值得纪念,因为WinUI 2.6也正式发布了! 相同的时间点意味着一件事,即WinUI 2.6和Windows ...

  9. Redisson 分布式锁源码 01:可重入锁加锁

    前言 相信小伙伴都是使用分布式服务,那一定绕不开分布式服务中数据并发更新问题! 单系统很容易想到 Java 的各种锁,像 synchronize.ReentrantLock 等等等,那分布式系统如何处 ...

  10. react的三大属性

    react的三大属性 state props  refs props 来自外部属性 states 来自内部状态 refs 用于表示组件内某个元素 state基础(最重要的属性) state是组件对象最 ...