装修设计图网站排名,代理ip平台,cms资源,厦门国外网站建设公司哪家好话说这次考试 Drink 非常棒的一道卡常练习题#xff0c;适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar#xff0c;输入getchar 在这个题快了7000豪 2.read 快读非常棒#xff0c;让你变得更快#xff0c;fread更棒#xff0c;fread会爆炸… 话说这次考试 Drink 非常棒的一道卡常练习题适合练习卡常 真的很棒 前置卡常知识 1.char要比int快 char是最快的 输出putchar输入getchar 在这个题快了7000豪 2.read 快读非常棒让你变得更快fread更棒fread会爆炸考试时不要用fread 3.循环展开 循环展开非常棒虽然看上去没什么用然而循环展开会让你的程序快很多循环展开往往是使你从T90到A的关键 4.inline inline没什么用 大多数时候都没有什么用一般时间不会发生什么变化然而在mex这个题inline突然变得有用 突然变快.jpeg 5.register 大多数时候都没有什么用然而有时会突然变快有时还会变慢 暂时没有例子或者说只有变慢的例子 6.STL priority_queue手打 stack手打 map手打不是让你打红黑树是hash表 stack真的慢stack打起来也好打手打 7.mod define或者const 定义成变量会很慢 8.*2变1 /2 变1 变 ! ^ 上面的卡常应用到这个题呢 char循环展开 代码 #includebits/stdc.h
using namespace std;
#define ll int
#define A 2100
char a[A][A];
ll n,m,k;
const int L120|1;
char buffer[L],*S,*T;
#define getchar() ((ST(T(Sbuffer)fread(buffer,1,L,stdin),ST))?EOF:*S)
const int maxn1000005;
inline int read(){register int ret;register char r;while(rgetchar(),r0||r9);retr-48;while(rgetchar(),r0r9)retret*10r-48;return ret;
}
int main(){nread(),mread(),kread();for(ll i1;in;i)for(ll j1;jm;j){register int ret;char rgetchar();while(!isdigit(r)) rgetchar();a[i][j]r;}for(ll j1,x,y,c,xl,yl;jk;j){xread(),yread(),cread();xlxc-1,ylyc-1;while(c1){ for(ll i0;ic-2;i){ll a1a[xl-i][y],a2a[x][yi],a3a[xi][yc-1],a4a[xc-1][yl-i];a[x][yi]a1,a[xi][yl]a2,a[xl][yl-i]a3,a[xl-i][y]a4;}x,y,yl--,xl--,c-2;}}for(ll i1;in;i,puts())for(ll j1;jm;j){putchar(a[i][j]);putchar( );}
} blue 这个题它不卡set它卡splay 贪心都说这个题很水但我还是觉得不明白看题解也是似懂非懂的 代码 #includebits/stdc.h
using namespace std;
#define A 5010101
#define Inf 10000000ll
#define ll long long
#define py printf(*****\n)
#define mem(a) memset(a,0,sizeof(a))
ll landu[A],head[A],nx[A],ver[A],edg[A],dep[A],a[A],bl[A],blx[A],ch[A][2],cnt[A],size[A],key[A],fa[A];
ll n,m,tot1,S,T,t,D,L,sz,rt;
setll s;
inline ll read(){ll f1,x0;char cgetchar();while(!isdigit(c)) {if(c-) f-1;cgetchar();}while(isdigit(c)){x(x1)(x3)c-0;cgetchar();}return f*x;
}
inline void clear(ll x)
{ch[x][0]ch[x][1]key[x]cnt[x]fa[x]size[x]0;
}
inline bool get(ll x)
{return ch[fa[x]][1]x;
}
inline void pushup(ll x)
{if(x){size[x]cnt[x];if(ch[x][1]) size[x]size[ch[x][1]];if(ch[x][0]) size[x]size[ch[x][0]];}
}
inline void rotate(ll x)
{ll oldfa[x],oldfafa[old],whichget(x);ch[old][which]ch[x][which^1]; fa[ch[old][which]]old;ch[x][which^1]old; fa[old]x;fa[x]oldfa;if(oldfa) ch[oldfa][ch[oldfa][1]old]x;pushup(old);pushup(x); return ;
}
inline void splay(ll x)
{for(ll f;ffa[x];rotate(x))if(fa[f])rotate(get(f)get(x)?f:x);rtx;
}
inline ll pre()
{if(cnt[rt]1) return rt;ll nowch[rt][0];while(ch[now][1]) nowch[now][1];return now;
}
inline ll nxt()
{ if(cnt[rt]1)return rt;ll nowch[rt][1];while(ch[now][0]) nowch[now][0];return now;
}
inline void insert(ll x)
{if(rt0){sz;rtsz;cnt[sz]size[sz]1;key[sz]x;fa[sz]ch[sz][0]ch[sz][1]0;return ;}ll f0,nowrt;while(233){ if(key[now]x){cnt[now];pushup(now);pushup(f);splay(now);return ;}fnow,nowch[now][key[now]x];if(now0){sz;cnt[sz]size[sz]1;key[sz]x;fa[sz]f;ch[sz][1]ch[sz][0]0;ch[f][key[f]x]sz;pushup(f);splay(sz);return ;}}
}
inline ll rnk(ll x)
{ll ans1,nowrt;while(1){if(xkey[now])nowch[now][0];else{anssize[ch[now][0]];if(xkey[now]){splay(now);return ans;}anscnt[now];nowch[now][1];}}
}
inline void del(ll x)
{rnk(x);if(cnt[rt]1){cnt[rt]--;pushup(rt);return ;} if(!ch[rt][0]!ch[rt][1]){clear(rt);rt0;return ;}if(!ch[rt][0]||!ch[rt][1]){ll oldrt;rtch[rt][1]|ch[rt][0];clear(old);fa[rt]0;return ;}ll olderrt; ll leftbigestpre();splay(leftbigest);ch[rt][1]ch[older][1];fa[ch[older][1]]rt;clear(older);pushup(rt);
}
void re(){memset(ch,0,sizeof(ch));memset(size,0,sizeof(size));memset(key,0,sizeof(key));memset(fa,0,sizeof(fa));
}
int main()
{
setll::iterator it;scanf(%lld,t);while(t--){nread(),mread(),Dread(),Lread();s.clear();s.insert(-0x7ffffff);for(ll i1;in;i){a[i]read();
// insert(a[i]);s.insert(a[i]);}ll ok1,cnt0;while(ok){ll now0;while(nowL){if(nowDL) break;
// insert(nowD);
// ll xpre();
// del(nowD);ll x*--s.upper_bound(nowD);
// printf(x%lld cnt%lld\n,x,cnt);if(xnow){ok0;break;}
// nowkey[x];nowx;s.erase(x);
// del(key[x]);}if(ok0) break;cnt;if(cntm) break;}if(cnt!m)printf(%lld\n,cnt);elseprintf(Excited\n);}
} weed 比较神的一道题学长讲的时候我没弄明白这次考试30分就是报应 以每个信息为下标记录三个信息减少之后的层数减少之后总的权值和对之前区间减少的量 首先在建树和修改时我们将叶子节点维护好上传时利用这三个信息进行计算就行了 优先删去右儿子节点出现时间靠后在右儿子不够时删除左儿子 假设我们现在已经算完左右儿子 那么如果右边儿子减少少于增加 直接无脑加即可 if(tr[rs].cut0){tr[x].vtr[ls].vtr[rs].v;tr[x].ctr[ls].ctr[rs].c;tr[x].cuttr[ls].cuttr[rs].cut;return ;} 如果右面儿子减少大于增加并且右面儿子减少左面儿子层数和 那么当前cut会有剩余那么v直接赋c直接赋成右面儿子剩余vc的值 if(tr[ls].ctr[rs].cut){tr[x].cuttr[rs].cut-tr[ls].ctr[ls].cut;tr[x].vtr[rs].v;tr[x].ctr[rs].c;return ;} 如果右面儿子减少小于左面增加这是一种比较麻烦的情况我们维护一个cal函数专门计算左面儿子v的值 if(tr[ls].ctr[rs].cut){tr[x].cuttr[ls].cut;tr[x].vtr[rs].vask(ls,tr[rs].cut);tr[x].ctr[rs].ctr[ls].c-tr[rs].cut;return ;} cal函数具体实现很简单 当右儿子恰好够减直接返回左儿子剩余 右儿子省的多从右儿子的右儿子搜 右儿子不够从左儿子搜 #includebits/stdc.h
using namespace std;
#define ll long long
#define A 7200000
#define ls x1
#define rs x1|1
#define py printf(****\n)
struct tree{ll l,r,v,c,cut;
}tr[A];
ll ceng[A],cu[A];
ll m,q;
ll ask(ll x,ll c){
// if(ctr[x].c) return 0;if(tr[rs].cc)return tr[x].v-tr[rs].v;else if(tr[rs].cc)return tr[x].v-tr[rs].vask(rs,c);else return ask(ls,c-tr[rs].ctr[rs].cut);
}
void pushup(ll x){if(tr[ls].ctr[rs].cut){tr[x].cuttr[rs].cut-tr[ls].ctr[ls].cut;tr[x].vtr[rs].v;tr[x].ctr[rs].c;return ;}if(tr[rs].cut0){tr[x].vtr[ls].vtr[rs].v;tr[x].ctr[ls].ctr[rs].c;tr[x].cuttr[ls].cuttr[rs].cut;return ;}if(tr[ls].ctr[rs].cut){tr[x].cuttr[ls].cut;tr[x].vtr[rs].vask(ls,tr[rs].cut);tr[x].ctr[rs].ctr[ls].c-tr[rs].cut;return ;}
}
void built(ll p,ll l,ll r){
// printf(p%lld l%lld r%lld\n,p,l,r);tr[p].ll,tr[p].rr;if(lr){if(cu[l]) {tr[p].cutceng[l];tr[p].v0,tr[p].c0;return ;}if(!cu[l]){tr[p].vceng[l];tr[p].c1;tr[p].cut0;return ;}}ll mid(lr)1;built(p1,l,mid);built(p1|1,mid1,r);pushup(p);
}
void change(ll x,ll q){if(tr[x].ltr[x].r){if(!cu[q]){tr[x].vceng[q];tr[x].c1;tr[x].cut0;return ;}else{tr[x].cutceng[q];tr[x].v0,tr[x].c0;return ;}}ll mid(tr[x].ltr[x].r)1;if(midq)change(ls,q);else change(rs,q);pushup(x);
}
int main(){scanf(%lld%lld,m,q);for(ll i1;im;i){scanf(%lld%lld,cu[i],ceng[i]);}built(1,1,m);
// printf(tr.c .v%lld %lld\n,tr[2].c,tr[2].v);
// printf(.c%lld v%lld\n,tr[3].c,tr[3].v);
// printf(.c%lld\n,tr[1].v);for(ll i1,a,b,c;iq;i){scanf(%lld%lld%lld,a,b,c);cu[a]b;ceng[a]c;change(1,a);
// printf(p14 v%lld c%lld\n,tr[14].c,tr[14].v);printf(%lld\n,tr[1].v);}
} 转载于:https://www.cnblogs.com/znsbc-13/p/11332552.html