[SDOI2018]原题识别
题解:
。。感觉挺烦得 而且我都没有注意到树随机这件事情。。
就写个30分的莫队。。
#include <bits/stdc++.h>
using namespace std;
#define rint register int
#define IL inline
#define rep(i,h,t) for (int i=h;i<=t;i++)
#define dep(i,t,h) for (int i=t;i>=h;i--)
#define me(x) memset(x,0,sizeof(x))
namespace IO{
char ss[<<],*A=ss,*B=ss;
IL char gc()
{
return A==B&&(B=(A=ss)+fread(ss,,<<,stdin),A==B)?EOF:*A++;
}
template<class T>void read(T &x)
{
rint f=,c; while (c=gc(),c<||c>) if (c=='-') f=-; x=(c^);
while (c=gc(),c>&&c<) x=(x<<)+(x<<)+(c^); x*=f;
}
char sr[<<],z[]; int Z,CC=-;
template<class T>void wer(T x)
{
if (x<) sr[++CC]='-',x=-x;
while (z[++Z]=x%+,x/=);
while (sr[++CC]=z[Z],--Z);
}
IL void wer1()
{
sr[++CC]=' ';
}
IL void wer2()
{
sr[++CC]='\n';
}
template<class T>IL void mina(T &x,T y) { if (x>y) x=y;}
template<class T>IL void maxa(T &x,T y) { if (x<y) x=y;}
template<class T>IL T MIN(T x,T y){return x<y?x:y;}
template<class T>IL T MAX(T x,T y){return x>y?x:y;}
};
using namespace IO;
unsigned int SA, SB, SC;
unsigned int rng61(){
SA ^= SA << ;
SA ^= SA >> ;
SA ^= SA << ;
unsigned int t = SA;
SA = SB;
SB = SC;
SC ^= t ^ SA;
return SC;
}
const int N=4.1e5;
int l,head[N],n,m,c[N];
struct re{
int a,b,c,d;
}e[N],a[N];
IL void arr(int x,int y)
{
e[++l].a=head[x];
e[l].b=y;
head[x]=l;
}
IL void addedge(int x,int y)
{
arr(x,y); arr(y,x);
}
int p;
void gen(){
cin>>n>>p>>SA>>SB>>SC;
l=; me(head);
for(int i = ; i <= p; i++)
addedge(i - , i);
for(int i = p + ; i <= n; i++)
addedge(rng61() % (i - ) + , i);
for(int i = ; i <= n; i++)
c[i] = rng61() % n + ;
}
int cnt,dfn1[N],dfn2[N],dep[N],block,num,pos[N];
int bz[][N],ans[N],jl[N],ans2,po[N],b[N];
void dfs(int x,int y)
{
bz[][x]=y; dep[x]=dep[y]+; dfn1[x]=++cnt;
b[cnt]=x;
for (rint u=head[x];u;u=e[u].a)
{
int v=e[u].b;
if (v!=y) dfs(v,x);
}
dfn2[x]=++cnt; b[cnt]=x;
}
void change(int x,int k)
{
x=b[x]; int o;
jl[x]+=k;
if (jl[x]==) o=; else o=-;
if (ans[c[x]]>) ans2--;
ans[c[x]]+=o;
if (ans[c[x]]>) ans2++;
}
int lca(int x,int y)
{
if (dep[x]<dep[y]) swap(x,y);
dep(i,,)
if (dep[bz[i][x]]>=dep[y])
x=bz[i][x];
if (x==y) return(x);
dep(i,,)
if (bz[i][x]!=bz[i][y])
x=bz[i][x],y=bz[i][y];
return bz[][x];
}
bool cmp(re x,re y)
{
int k1=pos[x.a],k2=pos[y.a];
return k1<k2||(k1==k2&&x.b<y.b);
}
int main()
{
freopen("1.in","r",stdin);
freopen("1.out","w",stdout);
ios::sync_with_stdio(false);
int T,m;
cin>>T;
while (T--)
{
me(ans); me(jl); cnt=; ans2=;
gen();
dfs(,);
rep(i,,)
rep(j,,n)
bz[i][j]=bz[i-][bz[i-][j]];
cin>>m;
rep(i,,m)
{
int kk,x,y;
cin>>kk>>x>>y;
int k=lca(x,y);
if (k!=x&&k!=y)
{
if (dfn1[x]>dfn1[y]) swap(x,y);
a[i].a=dfn2[x],a[i].b=dfn1[y];
a[i].c=k;
} else
{
if (y==k) swap(x,y);
a[i].a=dfn1[x],a[i].b=dfn1[y];
a[i].c=;
}
a[i].d=i;
}
int n1=*n;
block=sqrt(n1);
num=(n1-)/block+;
rep(i,,n1) pos[i]=(i-)/block+;
sort(a+,a+m+,cmp);
rep(i,,m)
{
if (a[i].a<=a[i-].a)
rep(j,a[i].a,a[i-].a-) change(j,);
if (a[i].b>=a[i-].b)
rep(j,a[i-].b+,a[i].b) change(j,);
if (a[i].a>a[i-].a)
rep(j,a[i-].a,a[i].a-) change(j,-);
if (a[i].b<a[i-].b)
rep(j,a[i].b+,a[i-].b) change(j,-);
if (a[i].c)
{
if (ans[c[a[i].c]]==) po[a[i].d]=ans2+;
else po[a[i].d]=ans2;
} else po[a[i].d]=ans2;
}
rep(i,,m) wer(po[i]),wer2();
}
fwrite(sr,,CC+,stdout);
return ;
}
[SDOI2018]原题识别的更多相关文章
- #LOJ2564 SDOI2018 原题识别 主席树
转载请注明原文地址:http://www.cnblogs.com/LadyLex/p/9057297.html 原题链接: 今天考试考了前天的SDOI考题 天啊我菜爆,只有T2拿了30分 然后考试后半 ...
- SDOI2018:原题识别
题解: https://files.cnblogs.com/files/clrs97/old-solution.pdf Code: #include<cstdio> #include< ...
- [CF676C]Vasya and String(尺取法,原题)
题目链接:http://codeforces.com/contest/676/problem/C 原题题解链接:http://www.cnblogs.com/vincentX/p/5405468.ht ...
- (各个公司面试原题)在线做了一套CC++综合測试题,也来測一下你的水平吧(二)
刚才把最后的10道题又看了下.也发上来吧. 以下给出试题.和我对题目的一些理解 前10道题地址 (各个公司面试原题)在线做了一套CC++综合測试题.也来測一下你的水平吧(一) 11.设已经有A,B,C ...
- NOIP2016原题终结测试(2017081801)
NOIP2016还有几道原题没有写掉,今天就一并布置掉. 答案的问题,有部分会先放到NOIP题解中,是单独发布的. 最后会汇总放在答案中,各位不要急. 还有,后期会有原创题测试,这个不急,反正11月才 ...
- 2019.3.16 noiac的原题模拟赛
RT,这太谔谔了,我不承认这是模拟赛 但是虽然是搬了三道题,题目本身也还能看,就这么着吧 (怎么机房里就我一道原题都没做过啊 T1 CF24D Broken Robot 比较简单地列出式子之后,我们发 ...
- 浅谈《剑指offer》原题:不使用条件、循环语句求1+2+……+n
转载自:浅谈<剑指offer>原题:求1+2+--+n 如侵犯您的版权,请联系:windeal12@qq.com <剑指offer>上的一道原题,求1+2+--+n,要求不能使 ...
- P1048 采药(洛谷,动态规划递推,01背包原题)
题目直接放链接 P1048 采药 这题只是01背包+背景故事而已 原题来的 PS:我写了一篇很详细的01背包说明,如果下面ac代码有看不懂的地方可以去看看 对01背包的分析与理解(图文) 下面上ac代 ...
- NOIP原题 斗地主(20190804)
题目描述 牛牛最近迷上了一种叫斗地主的扑克游戏.斗地主是一种使用黑桃.红心.梅花.方片的A到K加上大小王的共54张牌来进行的扑克牌游戏.在斗地主中,牌的大小关 系根据牌的数码表示如下:3<4&l ...
随机推荐
- C# 基础之const
1.使用 const 关键字来声明某个常量字段或常量局部变量.常量字段和常量局部变量不是变量并且不能修改. 常量可以为数字.布尔值.字符串或 null 引用(Constants can be numb ...
- hibernate框架学习之数据查询(本地SQL)
本地SQL查询方式 lHibernate框架支持使用原生态SQL语句进行操作数据库 l查询对象SQLQuery由Session获取 •SQLQuery sq = s.createSQLQuery(&q ...
- CodeForces 937C Save Energy! 水题
题意: 一个炉子烤鸡,炉子打开的时候一共$T$分钟可以烤完,关闭的时候一共$2T$分钟可以烤完,炉子每$K$分钟自动关闭,厨师每$D$分钟回来检查,打开炉子 问多长时间烤完.. 题解: 用整数写比较稳 ...
- MYSQL 查看最大连接数和修改最大连接数
MySQL查看最大连接数和修改最大连接数 1.查看最大连接数show variables like '%max_connections%';2.修改最大连接数set GLOBAL max_connec ...
- postman 设置api_token,测试数据等操作
在postman的环境变量中先设置好一个用户的token(事先你的数据库里面要有用户的这个数据),如下图: 然后在api请求的url 的head头部添加对应的token键名,value值用花括号{{t ...
- JMeter实现唯一参数生成不重复时间戳
现象: 使用jmeter做接口压测时,总会遇到压测时,提示不允许重复id或提示订单不允许重复现象,那么如何解决呢? 原料工具 jmeter4.0 本地准备好接口服务 思路: 单个接口,小批量接口,一般 ...
- Elasticsearch入门,这一篇就够了
实时搜索引擎Elasticsearch Elasticsearch(简称ES)是一个基于Apache Lucene(TM)的开源搜索引擎,无论在开源还是专有领域,Lucene可以被认为是迄今为止最先进 ...
- noj算法 装载问题 回溯法
描述: 有两艘船,载重量分别是c1. c2,n个集装箱,重量是wi (i=1…n),且所有集装箱的总重量不超过c1+c2.确定是否有可能将所有集装箱全部装入两艘船. 输入: 多个测例,每个测例的输入占 ...
- Java 银联支付官网demo测试及项目整合代码
注:原文来源与 < Java 银联支付官网demo测试及项目整合代码 > 银联支付(网关支付B2C) 一.测试官网demo a)下载官网开发包,导入eclipse等待修改(下载的开发包没 ...
- SecureCRT中sqlplus,使用Backspace删除时 ^H^H
平时习惯用Backspace删除输入错误,但是在SecureCRT中使用是,却是: SQL> sele^H^H 网上有几个方法,觉得改SecureCRT的配置最方便.