[考试总结]noip模拟46
脑袋确实是不好使了需要回家暴颓治疗
数数数树鼠树
真好玩。
数数
大水题一个,妥妥的签到题目,然后。。。
我没签上

气展了!!!
其实我还是想麻烦了。
就是我们实际上就是排序之后每一次找头上和尾巴上的就行
#include<bits/stdc++.h>
using std::cout; using std::endl;
#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)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#define debug cout<<"debug"<<endl
#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; int ak; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>inline xin_stream &operator >> (type &s)
{
register int f = 0;s = 0; register char ch = gc();
while(!isdigit(ch)) {f |= ch == '-'; ch = gc();}
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
using namespace xin_io; static const int maxn = 1e6+10,inf = 1e9+7; const ll llinf = 1e18+7;
#define int long long
namespace xin
{
int a[maxn],n;
int ans = 0,sum = 0,zhi1 = 0,zhi2 = 0;
inline short main()
{
io >> n;
try(i,1,n) io >> a[i];
std::sort(a+1,a+n+1);
zhi1 = 1; zhi2 = n;
try(i,1,n)
{
if(i & 1)
{
ans += sum;
}
else
{
sum += a[zhi2] - a[zhi1];
zhi2 --; zhi1 ++;
ans += sum;
}
cout<<ans<<endl;
}
return 0;
}
}
signed main() {return xin::main();}
数树
不会,鸽了。
鼠树
似乎我是没脸暴力水过去的。。。。
首先使用一个朴实无华的laji区间加减线段树。
然后我们还要有一个 \(vector\) 来记录每个黑色的点的管辖。
然后每个操作就是:
- 直接调用 \(query(1,1,n,id[x],id[x])\)
- 将 \(x\) 的子树加上 \(val\) ,然后要把剩下的 \(vector\) 当中的东西的子树都减掉 \(val\)
- 直接 \(query(1,1,n,id[x],id[x]+siz[x]-1)\)
- 就是反复进行 \(2\)
- 这个变化之后要进行\(vector\)记录
- 大致与 \(5\) 相同
#include<bits/stdc++.h>
using std::endl; using std::cout;
#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)
#define asm(i,x) for(register signed i=head[x];i;i=edge[i].next)
namespace xin_io
{
#define debug cout<<"debug"<<endl
#define sb(x) cout<<#x" = "<<x<<' '
#define jb(x) cout<<#x" = "<<x<<endl
#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; typedef long long ll; typedef unsigned long long ull;
class xin_stream{public:template<typename type>xin_stream &operator >> (type &s)
{
register bool f = 0; s = 0; register char ch = gc();
while(!isdigit(ch)) f |= ch == '-',ch = gc();
while( isdigit(ch)) s = (s << 1) + (s << 3) + (ch xor 48),ch = gc(); return s = f ? -s : s,*this;
}}io;
}
using namespace xin_io; static const int maxn = 5e6+10;
namespace xin
{
int n,m;
int fa[maxn];
class xin_edge{public:int next,ver;}edge[maxn];
int head[maxn],rp = 0;
inline void add(int x,int y) {edge[++rp].ver = y ;edge[rp].next = head[x]; head[x] = rp;}
int col[maxn],dep[maxn],siz[maxn],id[maxn],tot;
std::vector<int>cashe[maxn];
void dfs(int x)
{
siz[x] = 1; dep[x] = dep[fa[x]] + 1; id[x] = ++tot;
asm(i,x)
{
register int y = edge[i].ver;
if(y == fa[x]) continue;
dfs(y);
siz[x] += siz[y];
}
}
class xin_seg
{
private:
#define ls(fa) (fa << 1)
#define rs(fa) (fa << 1 | 1)
inline void up(int fa) {t[fa].s = t[ls(fa)].s + t[rs(fa)].s;}
inline void down(int fa,int l,int r)
{
if(!t[fa].debt) return ;
register int mid = l + r >> 1;
(t[ls(fa)].s += (mid - l + 1) * t[fa].debt); (t[rs(fa)].s += (r - mid) * t[fa].debt);
(t[ls(fa)].debt += t[fa].debt); (t[rs(fa)].debt += t[fa].debt);
t[fa].debt = 0;
}
public:
class xin_tree{public:unsigned s,debt;}t[maxn];
void update(int fa,int l,int r,int ql,int qr,int val)
{
if(ql <= l and qr >= r) return (t[fa].s += (r - l + 1) * val),(t[fa].debt += val),void();
register int mid = l + r >> 1;
down(fa,l,r);
if(ql <= mid) update(ls(fa),l,mid,ql,qr,val); if(qr > mid) update(rs(fa),mid+1,r,ql,qr,val);
up(fa);
}
unsigned query(int fa,int l,int r,int ql,int qr)
{
if(ql <= l and qr >= r) return t[fa].s;
register int mid = l + r >> 1;unsigned ret = 0;
down(fa,l,r);
if(ql <= mid) (ret += query(ls(fa),l,mid,ql,qr)); if(qr > mid) (ret += query(rs(fa),mid+1,r,ql,qr));
return ret;
}
}t;
int up[maxn];
inline short main()
{
io >> n >> m;
try(i,2,n)
{
io >> fa[i];
add(fa[i],i);
}
col[1] = 1; dfs(1);
try(cse,1,m)
{
register int op,k; io >> op >> k;
if(op == 1)
printf("%u\n",t.query(1,1,n,id[k],id[k]));
else if(op == 2)
{
register int val; io >> val;
t.update(1,1,n,id[k],id[k] + siz[k] - 1,val);
for(auto v : cashe[k]) t.update(1,1,n,id[v],id[v] + siz[v] - 1,-val);
}
else if(op == 3)
printf("%u\n",t.query(1,1,n,id[k],id[k] + siz[k] - 1));
else if(op == 4)
{
register int val; io >> val;
if(col[k] == 1)
{
t.update(1,1,n,id[k],id[k] + siz[k] - 1,val);
continue;
}
register int now = k;
while(!col[now]) now = fa[now];
for(auto v : cashe[now])
if(id[v] >= id[k] and id[v] <= id[k] + siz[k] - 1)
t.update(1,1,n,id[v],id[v] + siz[v] - 1,val);
}
else if(op == 5)
{
register int now = k;
while(!col[now]) now = fa[now];
up[k] = now;
int len = cashe[now].size() - 1;
try(i,0,len)
{
register int v = cashe[now][i];
if(id[v] >= id[k] and id[v] <= id[k] + siz[k] - 1)
{
cashe[k].push_back(v); up[v] = k;
cashe[now][i] = cashe[now][len];
i --; len --;
cashe[now].pop_back();
}
}
cashe[now].push_back(k);
col[k] = 1;
}
else
{
for(auto v : cashe[k])
{
cashe[up[k]].push_back(v);
up[v] = up[k];
}
cashe[k].clear();
int len = (int)cashe[up[k]].size() - 1;
try(i,0,len)
if(cashe[up[k]][i] == k)
{
cashe[up[k]][i] = cashe[up[k]][len];
cashe[up[k]].pop_back();
break;
}
up[k] = col[k] = 0;
}
}
return 0;
}
}
signed main() {return xin::main();}
ckw的树
俺不会,又鸽le.....
[考试总结]noip模拟46的更多相关文章
- 8.23考试总结(NOIP模拟46)[数数·数树·鼠树·ckw的树]
T1 数数 解题思路 大概是一个签到题的感觉...(但是 pyt 并没有签上) 第一题当然可以找规律,但是咱们还是老老实实搞正解吧... 先从小到大拍个序,这样可以保证 \(a_l<a_r\) ...
- 6.17考试总结(NOIP模拟8)[星际旅行·砍树·超级树·求和]
6.17考试总结(NOIP模拟8) 背景 考得不咋样,有一个非常遗憾的地方:最后一题少取膜了,\(100pts->40pts\),改了这么多年的错还是头一回看见以下的情景... T1星际旅行 前 ...
- 5.23考试总结(NOIP模拟2)
5.23考试总结(NOIP模拟2) 洛谷题单 看第一题第一眼,不好打呀;看第一题样例又一眼,诶,我直接一手小阶乘走人 然后就急忙去干T2T3了 后来考完一看,只有\(T1\)骗到了\(15pts\)[ ...
- 5.22考试总结(NOIP模拟1)
5.22考试总结(NOIP模拟1) 改题记录 T1 序列 题解 暴力思路很好想,分数也很好想\(QAQ\) (反正我只拿了5pts) 正解的话: 先用欧拉筛把1-n的素数筛出来 void get_Pr ...
- 2021.9.17考试总结[NOIP模拟55]
有的考试表面上自称NOIP模拟,背地里却是绍兴一中NOI模拟 吓得我直接文件打错 T1 Skip 设状态$f_i$为最后一次选$i$在$i$时的最优解.有$f_i=max_{j<i}[f_j+a ...
- [考试总结]noip模拟23
因为考试过多,所以学校的博客就暂时咕掉了,放到家里来写 不过话说,vscode的markdown编辑器还是真的很好用 先把 \(noip\) 模拟 \(23\) 的总结写了吧.. 俗话说:" ...
- 「考试」noip模拟9,11,13
9.1 辣鸡 可以把答案分成 每个矩形内部连线 和 矩形之间的连线 两部分 前半部分即为\(2(w-1)(h-1)\),后半部分可以模拟求(就是讨论四种相邻的情况) 如果\(n^2\)选择暴力模拟是有 ...
- 6.11考试总结(NOIP模拟7)
背景 时间分配与得分成反比,T1 20min 73pts,T2 1h 30pts,T3 2h 15pts(没有更新tot值,本来应该是40pts的,算是本次考试中最遗憾的地方了吧),改起来就是T3比较 ...
- 6.10考试总结(NOIP模拟6)
前言 就这题考的不咋样果然还挺难改的.. T1 辣鸡 前言 我做梦都没想到这题正解是模拟,打模拟赛的时候看错题面以为是\(n\times n\)的矩阵,喜提0pts. 解题思路 氢键的数量计算起来无非 ...
随机推荐
- [WUSTCTF2020]朴实无华
[WUSTCTF2020]朴实无华 考点:1.MD5碰撞 2.命令执行绕过 打开题发现编码有些问题,修改编码为utf-8 看了源码和请求包没发现什么东西,看到title想到了robots.txt文件, ...
- 终拿字节Offer...动态规划复盘...
大家好!我是 Johngo 呀! 和大家一起刷题不快不慢,没想到已经进行到了第二阶段,「动态规划」这部分题目很难,而且很不容易理解,目前我的题目做了一半,凭着之前对于「动态规划」的理解和最近做的题目做 ...
- C# WinForm 数据库连接及对数据库的相关操作
1.首先在App.config配置文件中配置数据库连接字符串: <appSettings> <add key="connectionstring" value=& ...
- 【Lua篇】静态代码扫描分析(四)规则检查
一.前言 通过前面三篇文章已经初步实现了将Lua源代码文件读取解析成语法树,现在就可以通过得到的语法树进行指定规则的代码扫描检查.下图简单列举了一下单个Lua文件内部的语法关系情况(注意并非真正的类图 ...
- 多线程案例:龟兔赛跑-Race
多线程案例:龟兔赛跑-Race 前置条件: 首先来个赛道距离,然后要离终点越来越近 判断比赛是否结束 打印出胜利者 龟兔赛跑开始 故事中是乌龟赢了,兔子需要睡觉,所以我们来模拟兔子睡觉 乌龟赢得比赛 ...
- [论文阅读] LCC-NLM(局部颜色校正, 非线性mask)
[论文阅读] LCC-NLM(局部颜色校正, 非线性mask) 文章: Local color correction using non-linear masking 1. 算法原理 如下图所示为, ...
- 【笔记】逻辑回归中使用多项式(sklearn)
在逻辑回归中使用多项式特征以及在sklearn中使用逻辑回归并添加多项式 在逻辑回归中使用多项式特征 在上面提到的直线划分中,很明显有个问题,当样本并没有很好地遵循直线划分(非线性分布)的时候,其预测 ...
- Python 应用爬虫下载QQ音乐
Python应用爬虫下载QQ音乐 目录: 1.简介怎样实现下载QQ音乐的过程: 2.代码 1.下载QQ音乐的过程 首先我们先来到QQ音乐的官网: https://y.qq.com/,在搜索栏上输入一首 ...
- Java之Cookie与Session
Cookie.Session Cookie:服务端生成Cookie发给客户端用于认证 Session:服务端进行进行登记,每人有不同的Session session与cookie的区别 Cookie: ...
- 012 基于FPGA的网口通信实例设计【转载】
一.网口通信设计分类 通过上面其他章节的介绍,网口千兆通信,可以使用TCP或者UDP协议,可以外挂PHY片或者不挂PHY片,总结下来就有下面几种方式完成通信: 图8‑17基于FPGA的网口通信实例设计 ...