QOJ.ac
QOJ
ID | 题目 | 提交者 | 结果 | 用时 | 内存 | 语言 | 文件大小 | 提交时间 | 测评时间 |
---|---|---|---|---|---|---|---|---|---|
#623792 | #7449. rgxsxrs | N_z_ | 0 | 0ms | 0kb | C++20 | 11.5kb | 2024-10-09 14:01:03 | 2024-10-09 14:01:03 |
answer
#include<bits/stdc++.h>
using namespace std;
struct time_helper{
#ifdef LOCAL
clock_t time_last;time_helper(){time_last=clock();}void test(){auto time_now=clock();std::cerr<<"time:"<<1.*(time_now-time_last)/CLOCKS_PER_SEC<<";all_time:"<<1.*time_now/CLOCKS_PER_SEC<<std::endl;time_last=time_now;}~time_helper(){test();}
#else
void test(){}
#endif
}time_helper;
#ifdef LOCAL
#include"dbg.h"
#else
#define dbg(...) (__VA_ARGS__)
#endif
namespace Fread{const int SIZE=1<<16;char buf[SIZE],*S,*T;inline char getchar(){if(S==T){T=(S=buf)+fread(buf,1,SIZE,stdin);if(S==T)return'\n';}return *S++;}}namespace Fwrite{const int SIZE=1<<16;char buf[SIZE],*S=buf,*T=buf+SIZE;inline void flush(){fwrite(buf,1,S-buf,stdout);S=buf;}inline void putchar(char c){*S++=c;if(S==T)flush();}struct NTR{~NTR(){flush();}}ztr;}
#define getchar Fread::getchar
#define putchar Fwrite::putchar
int print_precision=10;bool print_T_endl=1;char print_between=' ';
template<typename T>struct is_char{static constexpr bool value=(std::is_same<T,char>::value||std::is_same<T,signed char>::value||std::is_same<T,unsigned char>::value);};template<typename T>struct is_integral_ex{static constexpr bool value=(std::is_integral<T>::value||std::is_same<T,__int128>::value)&&!is_char<T>::value;};template<typename T>struct is_floating_point_ex{static constexpr bool value=std::is_floating_point<T>::value||std::is_same<T,__float128>::value;};namespace Fastio{struct Reader;struct Writer;template<size_t id>struct read_tuple{template<typename...T>static void read(Reader&stream,std::tuple<T...>&x){read_tuple<id-1>::read(stream,x);stream>>get<id-1>(x);}};template<>struct read_tuple<0>{template<typename...T>static void read([[maybe_unused]]Reader&stream,[[maybe_unused]]std::tuple<T...>&x){}};template<size_t id>struct print_tuple{template<typename...T>static void print(Writer&stream,const std::tuple<T...>&x){print_tuple<id-1>::print(stream,x);putchar(print_between);stream<<get<id-1>(x);}};template<>struct print_tuple<1>{template<typename...T>static void print(Writer&stream,const std::tuple<T...>&x){stream<<get<0>(x);}};template<>struct print_tuple<0>{template<typename...T>static void print([[maybe_unused]]Writer&stream,[[maybe_unused]]const std::tuple<T...>&x){}};
struct Reader{template<typename T>typename std::enable_if_t<std::is_class<T>::value,Reader&>operator>>(T&x){for(auto &y:x)*this>>y;return *this;}template<typename...T>Reader&operator>>(std::tuple<T...>&x){read_tuple<sizeof...(T)>::read(*this,x);return *this;}template<typename T>typename std::enable_if_t<is_integral_ex<T>::value,Reader&>operator>>(T&x){char c=getchar();short f=1;while(c<'0'||c>'9'){if(c=='-')f*=-1;c=getchar();}x=0;while(c>='0'&&c<='9'){x=(x<<1)+(x<<3)+(c^48);c=getchar();}x*=f;return *this;}template<typename T>typename std::enable_if_t<is_floating_point_ex<T>::value,Reader&>operator>>(T&x){char c=getchar();short f=1,s=0;x=0;T t=0;while((c<'0'||c>'9')&&c!='.'){if(c=='-')f*=-1;c=getchar();}while(c>='0'&&c<='9'&&c!='.')x=x*10+(c^48),c=getchar();if(c=='.')c=getchar();else return x*=f,*this;while(c>='0'&&c<='9')t=t*10+(c^48),s++,c=getchar();while(s--)t/=10.0;x=(x+t)*f;return*this;}template<typename T>typename std::enable_if_t<is_char<T>::value,Reader&>operator>>(T&c){c=getchar();while(c=='\n'||c==' '||c=='\r')c=getchar();return *this;}Reader&operator>>(char*str){int len=0;char c=getchar();while(c=='\n'||c==' '||c=='\r')c=getchar();while(c!='\n'&&c!=' '&&c!='\r')str[len++]=c,c=getchar();str[len]='\0';return*this;}template<typename T1,typename T2>Reader&operator>>(std::pair<T1,T2>&x){*this>>x.first>>x.second;return *this;}Reader&operator>>(std::string&str){str.clear();char c=getchar();while(c=='\n'||c==' '||c=='\r')c=getchar();while(c!='\n'&&c!=' '&&c!='\r')str.push_back(c),c=getchar();return*this;}Reader(){}}cin;const char endl='\n';
struct Writer{typedef __int128 mxdouble;template<typename T>typename std::enable_if_t<std::is_class<T>::value,Writer&>operator<<(const T&x){for(auto q:x){*this<<q;if(!is_class<decltype(q)>::value)*this<<print_between;}if(!is_class<typename T::value_type>::value&&print_T_endl)*this<<'\n';return *this;}template<typename...T>Writer&operator<<(const std::tuple<T...>&x){print_tuple<sizeof...(T)>::print(*this,x);if(print_T_endl)*this<<'\n';return *this;}template<typename T>typename std::enable_if_t<is_integral_ex<T>::value,Writer&>operator<<(T x){if(x==0)return putchar('0'),*this;if(x<0)putchar('-'),x=-x;static int sta[45];int top=0;while(x)sta[++top]=x%10,x/=10;while(top)putchar(sta[top]+'0'),--top;return*this;}template<typename T>typename std::enable_if_t<is_floating_point_ex<T>::value,Writer&>operator<<(T x){if(x<0)putchar('-'),x=-x;x+=pow(10,-print_precision)/2;mxdouble _=x;x-=(T)_;static int sta[45];int top=0;while(_)sta[++top]=_%10,_/=10;if(!top)putchar('0');while(top)putchar(sta[top]+'0'),--top;putchar('.');for(int i=0;i<print_precision;i++)x*=10;_=x;while(_)sta[++top]=_%10,_/=10;for(int i=0;i<print_precision-top;i++)putchar('0');while(top)putchar(sta[top]+'0'),--top;return*this;}template<typename T>typename std::enable_if_t<is_char<T>::value,Writer&>operator<<(const T&c){putchar(c);return*this;}Writer&operator<<(char*str){int cur=0;while(str[cur])putchar(str[cur++]);return *this;}Writer&operator<<(const char*str){int cur=0;while(str[cur])putchar(str[cur++]);return*this;}template<typename T1,typename T2>Writer&operator<<(const std::pair<T1,T2>&x){*this<<x.first<<print_between<<x.second;if(print_T_endl)*this<<'\n';return *this;}Writer&operator<<(const std::string&str){int st=0,ed=str.size();while(st<ed)putchar(str[st++]);return*this;}Writer(){}}cout;}
#define cin Fastio::cin
#define cout Fastio::cout
#define endl Fastio::endl
template<class Fun>class y_combinator_result{Fun fun_;public:template<class T>explicit y_combinator_result(T &&fun): fun_(std::forward<T>(fun)) {}template<class ...Args>decltype(auto) operator()(Args &&...args){return fun_(std::ref(*this), std::forward<Args>(args)...);}};template<class Fun>decltype(auto) y_combinator(Fun &&fun){return y_combinator_result<std::decay_t<Fun>>(std::forward<Fun>(fun));}
void init();void solve(int tc);
main()
{
init();int t=1;
// cin>>t;
for(int tc=1;tc<=t;tc++)solve(tc);
}
void init()
{
}
constexpr int vlim=100000,inf=1e9;
int a[500001],n;
struct node
{
int mi,mx,cnt,tag;
long long sum;
// node()=delete;
node operator+(const node&b)
{
return {min(mi,b.mi),max(mx,b.mx),cnt+b.cnt,0,sum+b.sum};
}
}tr[31][vlim+2];
void bbuild(int u,int l,int r)
{
for(int x=0;x<=30;x++)
tr[x][u]=node{inf,0,0,0,0};
for(int x=l;x<=r;x++)
tr[__lg(a[x])][u]=tr[__lg(a[x])][u]+node{a[x],a[x],1,0,a[x]};
}
void build(int u,int l,int r)
{
if(u*2>vlim)
{
bbuild(u,l,r);
return;
}
if(l==r)
{
for(int x=0;x<=30;x++)
tr[x][u]=node{inf,0,0,0,0};
tr[__lg(a[l])][u]={a[l],a[l],1,0,a[l]};
return;
}
int mi=(l+r)/2;
build(u*2,l,mi);
build(u*2+1,mi+1,r);
for(int x=0;x<=30;x++)
tr[x][u]=tr[x][u*2]+tr[x][u*2+1];
}
void addtag(int u,int lv,int val)
{
tr[lv][u].mx-=val;
tr[lv][u].mi-=val;
tr[lv][u].tag+=val;
tr[lv][u].sum-=1ll*tr[lv][u].cnt*val;
}
void pushdown(int u,int lv)
{
if(tr[lv][u].tag)
{
addtag(u*2,lv,tr[lv][u].tag);
addtag(u*2+1,lv,tr[lv][u].tag);
tr[lv][u].tag=0;
}
}
void bapplytag(int u,int l,int r)
{
for(int x=l;x<=r;x++)
a[x]-=tr[__lg(a[x])][u].tag;
for(int x=0;x<=30;x++)
tr[x][u].tag=0;
}
void bapplytag(int u,int l,int r,int lv)
{
if(tr[lv][u].tag)bapplytag(u,l,r);
}
void bupdate0(int u,int l,int r,int pos,int val,int lv)
{
bapplytag(u,l,r,lv);
a[pos]=val;
tr[lv][u]=node{inf,0,0,0,0};
for(int x=l;x<=r;x++)
{
if(x==pos)a[x]=val;
if(__lg(a[x])==lv)tr[lv][u]=tr[lv][u]+node{a[x],a[x],1,0,a[x]};
}
}
void update0(int u,int l,int r,int pos,int val,int lv)
{
if(u*2>vlim)
{
bupdate0(u,l,r,pos,val,lv);
return;
}
if(l==r)
{
tr[lv][u]={val,val,1,0,val};
return;
}
pushdown(u,lv);
int mi=(l+r)/2;
if(pos<=mi)update0(u*2,l,mi,pos,val,lv);
else update0(u*2+1,mi+1,r,pos,val,lv);
tr[lv][u]=tr[lv][u*2]+tr[lv][u*2+1];
}
void bmodify(int u,int l,int r,int L,int R,int val,int lv)
{
bapplytag(u,l,r,lv);
for(int x=l;x<=r;x++)
if(L<=x&&x<=R&&__lg(a[x])==lv&&a[x]>val)
{
if(a[x]-val>=(1<<lv))a[x]-=val;
else
{
int k=a[x]-val;
int nlv=__lg(k);
update0(1,1,n,x,k,nlv);
}
}
tr[lv][u]=node{inf,0,0,0,0};
for(int x=l;x<=r;x++)
if(__lg(a[x])==lv)tr[lv][u]=tr[lv][u]+node{a[x],a[x],1,0,a[x]};
}
void modify(int u,int l,int r,int L,int R,int val,int lv)
{
// cerr<<u<<','<<l<<','<<r<<','<<L<<','<<R<<','<<lv<<endl;
if(tr[lv][u].mx<=val)return;
if(u*2>vlim)
{
bmodify(u,l,r,L,R,val,lv);
return;
}
if(L<=l&&r<=R&&tr[lv][u].mi-val>=(1<<lv))
{
// cerr<<"addtag"<<u<<','<<lv<<','<<val<<endl;
addtag(u,lv,val);
return;
}
if(l==r)
{
int k=tr[lv][u].mx-val;
int nlv=__lg(k);
// cerr<<"specialadd"<<u<<','<<lv<<','<<nlv<<','<<val<<','<<k<<endl;
tr[lv][u]=node{inf,0,0,0,0};
update0(1,1,n,l,k,nlv);
return;
}
pushdown(u,lv);
int mi=(l+r)/2;
if(L<=mi)modify(u*2,l,mi,L,R,val,lv);
if(mi<R)modify(u*2+1,mi+1,r,L,R,val,lv);
tr[lv][u]=tr[lv][u*2]+tr[lv][u*2+1];
}
node bquery(int u,int l,int r,int L,int R)
{
bapplytag(u,l,r);
node res=node{inf,0,0,0,0};
for(int x=l;x<=r;x++)
if(L<=x&&x<=R)res=res+node{a[x],a[x],1,0,a[x]};
return res;
}
node query(int u,int l,int r,int L,int R)
{
if(u*2>vlim)
{
return bquery(u,l,r,L,R);
}
if(L<=l&&r<=R)
{
node res=node{inf,0,0,0,0};
for(int x=0;x<=30;x++)
res=res+tr[x][u];
return res;
}
for(int x=0;x<=30;x++)
pushdown(u,x);
int mi=(l+r)/2;
if(R<=mi)return query(u*2,l,mi,L,R);
if(mi<L)return query(u*2+1,mi+1,r,L,R);
return query(u*2,l,mi,L,R)+query(u*2+1,mi+1,r,L,R);
}
void boutput(int u,int l,int r)
{
cerr<<"detail in "<<l<<','<<r<<endl;
bapplytag(u,l,r);
for(int x=l;x<=r;x++)
cerr<<a[x]<<' ';cerr<<endl;
}
void output(int u,int l,int r)
{
node res=node{inf,0,0,0,0};
for(int x=0;x<=30;x++)
res=res+tr[x][u];
cerr<<u<<','<<l<<','<<r<<','<<res.sum<<','<<res.mi<<','<<res.mx<<','<<res.cnt<<endl;
if(u*2>vlim)
{
boutput(u,l,r);
return;
}
// for(auto i:{0,1})
// cerr<<i<<':'<<tr[i][u].sum<<','<<tr[i][u].mi<<','<<tr[i][u].mx<<','<<tr[i][u].cnt<<endl;
if(l==r)return;
for(int x=0;x<=30;x++)
pushdown(u,x);
int mi=(l+r)/2;
output(u*2,l,mi);
output(u*2+1,mi+1,r);
}
void solve([[maybe_unused]]int tc)
{
int m;
cin>>n>>m;
for(int x=1;x<=n;x++)
cin>>a[x];
build(1,1,n);
int lastans=0;
while(m--)
{
// cerr<<"-----------"<<endl;output(1,1,n);cerr<<"----------"<<endl;
int op;
cin>>op;
// lastans=0;
if(op==1)
{
int l,r,x;
cin>>l>>r>>x;
l^=lastans,r^=lastans,x^=lastans;
for(int i=0;i<=30;i++)
modify(1,1,n,l,r,x,i);
}
else
{
int l,r;
cin>>l>>r;
l^=lastans,r^=lastans;
node res=query(1,1,n,l,r);
cout<<res.sum<<' '<<res.mi<<' '<<res.mx<<endl;
// cerr<<res.sum<<','<<res.mi<<','<<res.mx<<endl;
lastans=res.sum%(1<<20);
}
}
}
詳細信息
Subtask #1:
score: 0
Memory Limit Exceeded
Test #1:
score: 0
Memory Limit Exceeded
input:
1000 1000 935816535 513713699 701239859 881761843 312245068 749043434 112422339 4851733 369182510 741607986 336173081 76013815 91837056 23042507 28754006 935721035 332487169 739344582 280604892 549629633 428486579 693745524 772744523 736620619 596867287 553364838 842666116 620926490 350404590 972861...
output:
265016378473 746807 999055631 666065535 666065535 666065535 271006237166 746807 999055631 244146031651 726339 992039812 15823858743 7712227 991422034 1807891893 93288403 840436769 17240518274 746807 968670509 110636754727 726339 817084515 57343541330 746807 806807028 41246731402 746807 770270334 588...
result:
Subtask #2:
score: 0
Memory Limit Exceeded
Test #2:
score: 0
Memory Limit Exceeded
input:
200000 200000 10 7 6 1 5 5 10 1 9 4 7 1 5 4 8 9 5 7 10 2 10 3 3 5 5 2 1 4 10 5 7 2 6 1 3 1 6 4 7 5 3 1 3 2 9 5 4 10 8 3 10 4 4 8 5 4 6 10 4 10 9 6 7 4 6 7 7 6 2 6 6 10 10 6 8 8 9 4 6 3 3 9 8 1 8 5 8 2 7 3 1 10 5 10 1 5 8 5 6 6 7 9 7 3 5 8 4 4 3 2 9 3 10 2 5 4 2 2 6 3 3 5 8 4 2 1 2 9 2 3 6 3 8 9 4 10...
output:
8548 1 10 358083 1 10 371696 1 10 367527 1 10 31930 1 10 41965 1 5 4288 1 10 52736 1 9 311942 1 10 168381 1 10 136991 1 7 52274 1 9 35176 1 5 114387 1 10 4104 1 10 74578 1 6 188927 1 10 425739 1 10 46796 1 6 109184 1 6 47640 1 6 115544 1 6 123196 1 6 118225 1 6 160295 1 5 43007 1 10 10471 1 7 80111 ...
result:
Subtask #3:
score: 0
Memory Limit Exceeded
Test #5:
score: 0
Memory Limit Exceeded
input:
200000 200000 615 736 846 534 658 429 631 720 898 583 797 295 303 336 449 358 57 338 954 414 330 212 171 200 403 553 308 20 805 249 767 291 545 196 324 928 439 197 20 601 737 748 817 858 816 130 403 858 813 936 771 242 833 863 978 260 357 856 954 89 673 733 364 473 903 445 823 894 49 747 382 56 309 ...
output:
4143168 1 1000 8707838 1 1000 47796901 1 1000 55161188 1 1000 17880698 1 1000 9738037 1 888 11217598 1 939 2273447 1 939 12642515 1 888 12437017 1 999 15429733 1 888 29802638 1 939 200711 2 887 51511251 1 1000 9402071 1 888 25821404 1 939 19529749 1 923 6444888 1 930 10956864 1 564 1514736 1 408 881...
result:
Subtask #4:
score: 0
Memory Limit Exceeded
Test #8:
score: 0
Memory Limit Exceeded
input:
200000 200000 78066 141247 11068 105207 26127 179253 104948 145839 150954 60877 67556 61673 69638 150806 127596 162902 125410 38242 97645 20582 193537 139906 114184 129867 126626 85640 91551 19445 134855 85251 22162 3798 122992 38278 131907 96159 153440 94561 185234 15296 76886 108452 70560 77355 14...
output:
9335629761 8 199997 291062233 15 145210 2757513812 2 114001 457932161 15 145210 2988949571 2 104377 2096022866 2 145091 51774664 57 104218 1802593096 2 101531 838652514 1 91888 2086037512 5 199981 1740038288 2 113977 2833816579 1 101510 1643368391 2 132714 1457965364 2 101524 868906251 2 101524 8249...
result:
Subtask #5:
score: 0
Memory Limit Exceeded
Test #12:
score: 0
Memory Limit Exceeded
input:
500000 500000 56 22353719 15918 54 13 1 389 7 809 2204 75911688 4218278 36 7205 93542078 506 4761175 102646343 48 65900 10 228 2 292994 26348644 6 19339 148 704 232124395 19307 52070 8964343 7430314 42755 115 869 32485365 252183868 481162087 852632 38758 2945883 279412 15012 82 33076951 1537 6954898...
output:
106593480756 1 984003850 3657321749885 1 772605710 4340368607039 1 997617313 2024546424119 1 999735807 1053708059297 1 999735807 1594458070417 1 999904830 3990648241119 1 772605710 2714488265571 1 999735807 384978298678 1 772605710 1159542455950 1 999273673 3500807088693 1 967123827 5113110257086 1 ...