QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#366816 | #6533. Traveling in Cells | crsfaa# | AC ✓ | 4858ms | 184868kb | C++14 | 2.8kb | 2024-03-25 09:08:19 | 2024-03-25 09:08:19 |
Judging History
answer
#include<bits/stdc++.h>
#define Yukinoshita namespace
#define Yukino std
using Yukinoshita Yukino;
int read()
{
int s=0,w=1;
char ch=getchar();
while(ch<'0'||ch>'9') w=ch=='-'?-1:1,ch=getchar();
while(ch>='0'&&ch<='9') s=s*10+ch-'0',ch=getchar();
return s*w;
}
const int mxn=1e5+5;
int c[mxn],v[mxn];
using ll=long long;
int n;
struct BIT
{
#define lowbit(x) (x&-x)
int N;
ll t[mxn];
void clear(int n)
{
N=n;
memset(t,0,n+1<<3);
}
void add(int x,int v)
{
for(;x<=N;x+=lowbit(x))
t[x]+=v;
}
ll ask(int x)
{
ll s=0;
for(;x;x-=lowbit(x))
s+=t[x];
return s;
}
}T;
vector<int> pos[mxn];
struct seg
{
int l,r;
}t[mxn*4];
set<int> p[mxn*4];
#define ls w<<1
#define rs ls|1
void build(int w,int l,int r)
{
t[w].l=l,t[w].r=r,p[w].clear();
if(l<r)
{
int mid=l+r>>1;
build(ls,l,mid);
build(rs,mid+1,r);
p[w]=p[ls];
for(auto x:p[rs])
p[w].insert(x);
}
else
{
for(auto x:pos[l])
p[w].insert(x);
p[w].insert(0),p[w].insert(n+1);
}
}
void del(int w,int x,int v)
{
p[w].erase(v);
if(t[w].l<t[w].r)
del(t[ls].r>=x?ls:rs,x,v);
}
void add(int w,int x,int v)
{
p[w].insert(v);
if(t[w].l<t[w].r)
add(t[ls].r>=x?ls:rs,x,v);
}
using IT=set<int>::iterator;
pair<int,int> ask(int w,int l,int r,int x)
{
if(l>r) return make_pair(0,n+1);
if(t[w].l>=l&&t[w].r<=r)
{
IT c=p[w].lower_bound(x);
int res=*c;
return {*--c,res};
}
pair<int,int> res{0,n+1};
if(t[ls].r>=l) res=ask(ls,l,r,x);
if(t[rs].l<=r)
{
pair<int,int> tp=ask(rs,l,r,x);
res.first=max(res.first,tp.first);
res.second=min(res.second,tp.second);
}
return res;
}
/*
2
5 10
1 2 3 1 2
1 10 100 1000 10000
3 3 1 3
3 3 2 2 3
2 5 20000
2 3 200
3 3 2 1 3
3 3 3 1 2 3
1 3 4
2 1 100000
1 2 2
3 1 2 1 2
4 1
1 2 3 4
1000000 1000000 1000000 1000000
3 4 4 1 2 3 4
*/
int main()
{
int Ti=read();
while(Ti--)
{
n=read();
int m=read(),i,j;
T.clear(n);
for(i=1;i<=n;i++)
pos[i].clear();
for(i=1;i<=n;i++)
c[i]=read(),pos[c[i]].push_back(i);
build(1,1,n);
for(i=1;i<=n;i++)
v[i]=read(),T.add(i,v[i]);
while(m--)
{
int opt=read(),x=read(),v=read();
if(opt==1)
del(1,c[x],x),add(1,c[x]=v,x);
if(opt==2)
T.add(x,v-::v[x]),::v[x]=v;
if(opt==3)
{
vector<int> ps;
ps.push_back(0);
while(v--)
ps.push_back(read());
ps.push_back(n+1);
pair<int,int> res{0,n+1};
for(i=1;i<ps.size();i++)
{
pair<int,int> tp=ask(1,ps[i-1]+1,ps[i]-1,x);
res.first=max(res.first,tp.first);
res.second=min(res.second,tp.second);
}
// cout<<res.first<<' '<<res.second<<endl;
printf("%lld\n",T.ask(res.second-1)-T.ask(res.first));
}
}
}
}
/*
10
3 3
1 2 3
1 10 100
3 1 3 1 2 3
*/
Details
Tip: Click on the bar to expand more detailed information
Test #1:
score: 100
Accepted
time: 3ms
memory: 28080kb
input:
2 5 10 1 2 3 1 2 1 10 100 1000 10000 3 3 1 3 3 3 2 2 3 2 5 20000 2 3 200 3 3 2 1 3 3 3 3 1 2 3 1 3 4 2 1 100000 1 2 2 3 1 2 1 2 4 1 1 2 3 4 1000000 1000000 1000000 1000000 3 4 4 1 2 3 4
output:
100 110 1200 21211 100010 4000000
result:
ok 6 numbers
Test #2:
score: 0
Accepted
time: 208ms
memory: 25944kb
input:
20000 15 15 1 1 3 3 2 3 3 3 3 3 2 3 2 3 3 634593973 158136379 707704004 998369647 831633445 263092797 937841412 451774682 552617416 483763379 50360475 794662797 74247465 537217773 901809831 3 6 4 1 3 5 10 3 5 7 1 2 3 4 5 9 10 3 4 3 3 8 9 2 13 608033129 3 15 2 3 5 1 9 3 3 8 4 1 3 7 10 2 6 727472865 3...
output:
2689089686 8377825475 1706073651 1439027604 2689089686 792730352 8904867081 8904867081 8270273108 831633445 692051585 2782432626 697783016 883944422 184057757 287523250 184057757 696388752 184057757 1675459344 2667693025 2614711258 4006992373 1767091974 5348541057 5348541057 390631780 2290216252 942...
result:
ok 200062 numbers
Test #3:
score: 0
Accepted
time: 291ms
memory: 28300kb
input:
2000 150 150 8 3 8 8 8 6 8 4 2 7 6 8 8 5 8 7 7 8 5 6 8 8 6 8 8 8 8 7 8 6 6 8 8 8 6 2 3 4 8 8 7 8 5 8 2 6 8 7 8 8 6 8 6 8 3 8 8 8 8 4 7 8 7 3 7 6 7 5 5 8 6 8 8 6 3 8 6 7 6 8 8 7 4 8 6 7 8 7 7 7 7 8 8 8 8 2 5 2 8 8 6 7 6 3 8 8 7 8 8 8 6 6 8 6 6 7 5 8 8 8 7 8 7 7 6 8 8 8 8 8 8 6 5 7 5 5 8 7 8 7 7 7 6 5...
output:
4449391171 3290849667 852793841 5178673994 995994209 11431868919 4327723427 5071541023 3032743466 962345334 2997656427 4534278452 3851900075 3611231417 5071541023 1477584218 1299005818 1299005818 2145605244 854143763 886347565 2081234124 2333808475 2455955801 4179722063 2328504333 1473735464 4107685...
result:
ok 199987 numbers
Test #4:
score: 0
Accepted
time: 829ms
memory: 54904kb
input:
10 30000 30000 3 4 2 4 4 4 4 3 4 3 4 3 4 3 4 4 2 4 4 4 4 4 3 3 3 4 3 4 3 4 3 3 4 2 4 3 3 3 3 4 3 4 4 4 4 2 3 3 4 2 3 4 4 4 4 1 4 4 4 4 4 4 4 4 3 3 3 4 4 4 4 4 2 3 4 4 4 4 3 4 4 3 3 3 4 4 3 4 4 2 3 4 4 4 4 3 2 4 3 4 3 2 4 4 3 4 2 2 4 4 4 4 2 4 3 2 4 4 3 4 4 4 2 4 4 3 2 3 2 3 3 3 4 2 4 3 4 1 4 3 4 4 4...
output:
6959437173 934970676 72461245502 8365928740 8384151048 984567228 12482909122 1904927816 15134139942 3759040688 92670874909 332468911 5936663371 3562978848 1300592004 10314009201 5581540905 131246926443 15087184135864 4077066271 1124704817 1520626740 4388174158 744377942 2770411457 6231852240 1508724...
result:
ok 200135 numbers
Test #5:
score: 0
Accepted
time: 1173ms
memory: 133680kb
input:
3 100000 100000 6 6 2 6 5 3 6 5 4 6 4 6 6 6 6 5 2 5 2 6 6 6 1 6 5 6 4 5 6 6 5 4 5 4 3 4 5 5 6 6 5 6 6 5 2 5 6 5 4 2 5 6 6 6 5 2 5 6 6 4 5 6 3 3 6 5 6 5 5 5 5 4 4 4 4 3 6 5 4 5 6 5 6 6 6 6 3 6 5 6 5 4 3 5 6 4 5 3 6 5 3 5 6 4 6 5 4 5 5 5 2 5 4 6 6 3 5 5 5 5 5 4 5 5 6 5 5 6 6 6 5 5 4 6 5 4 4 2 6 6 6 5 ...
output:
753014823 938372065 5655899645 168297301 14372254310 1066586326 3520855082 2591792266 2321844837 64378192092 250581310 1845085639 1402247975 198007248 2157074263 2743531397 3433471688 10332600792 1085086491 4845484125 50019185900042 4036199358 154762798 50019185900042 1221387905 11240790307 10537215...
result:
ok 199749 numbers
Test #6:
score: 0
Accepted
time: 3156ms
memory: 132572kb
input:
3 100000 100000 173 276 418 362 183 321 401 316 193 426 212 126 206 409 382 443 405 412 259 233 356 355 340 41 354 447 421 464 436 436 329 239 427 415 452 424 174 294 220 413 293 456 140 304 438 462 418 345 160 296 443 234 455 452 396 347 438 413 235 416 363 186 340 285 340 457 392 359 451 310 431 1...
output:
832547880 1825993219 676042867 310750190 650714631 657481975 1279322 838513014 453432678 940357183 846050641 631145680 278723792 689448062 154699248 45678908 56518237 839298643 611124630 499104412 324172054 742064269 626600147 728123335 602272914 45485542 868574266 876207167 342300121 917221167 7055...
result:
ok 200119 numbers
Test #7:
score: 0
Accepted
time: 4858ms
memory: 184868kb
input:
3 100000 100000 66046 49249 42478 61684 59308 38366 66208 38769 50465 63701 50193 47811 50312 56793 58616 63383 58390 17546 23446 57532 59030 63009 62771 46338 52747 54677 68893 58360 56617 42330 65075 51193 65417 67035 54247 54323 39404 61892 42821 30094 67958 46206 53273 28507 65864 42364 64063 46...
output:
787181803 340358691 794440759 970166774 501256821 822531703 505349238 299646179 317091968 718901636 589846615 490283989 1183290 98835675 715091970 941598117 81757251 249078591 559980949 587721512 408541247 542135558 217103011 916103998 422219165 786665928 215595722 309683697 275650079 660176857 9707...
result:
ok 199750 numbers
Test #8:
score: 0
Accepted
time: 2128ms
memory: 134068kb
input:
3 100000 100000 2 2 3 1 1 3 1 3 1 1 1 1 1 3 3 2 3 1 1 3 3 3 2 1 2 3 2 3 1 1 2 2 2 3 1 1 3 3 3 3 1 3 1 1 3 2 3 1 1 2 3 3 2 1 3 1 1 1 2 3 3 2 3 3 1 1 2 2 2 1 1 3 1 1 2 2 1 3 3 3 2 1 1 2 1 2 3 3 3 2 2 3 3 2 3 2 1 3 3 3 2 2 3 1 3 2 3 2 3 1 2 2 1 2 1 3 3 3 2 2 3 1 3 2 1 1 1 2 1 2 2 1 3 1 2 1 1 3 3 2 3 3 ...
output:
50035938417434 50036115992265 50036315519498 3975347985 50036470174447 50036191297549 7222739016 50036248757817 1886106914 50037215621946 50037215621946 50037215621946 50037789462602 50037789462602 50038171558883 50038171558883 50038171558883 50037356071541 50037356071541 840665598 50037454922987 19...
result:
ok 144306 numbers
Test #9:
score: 0
Accepted
time: 2008ms
memory: 135520kb
input:
3 100000 100000 60522 14575 36426 79445 48772 90081 33447 90629 3497 47202 7775 94325 63982 4784 68417 2156 31932 35902 95728 78537 23857 30739 86918 29211 39679 38506 63340 86568 61868 60016 87940 96263 24593 1449 36991 90310 23355 77068 11431 8580 91757 49218 74934 94328 63676 29355 96221 99080 95...
output:
49028798194951 49028798194951 49028798194951 445374817 49028798194951 49028798194951 49028798194951 49028798194951 49029113499144 49029113499144 49029113499144 568084096 49029252709603 49029252709603 49029252709603 49029252709603 49029252709603 49029252709603 49029252709603 142834402 644706458 49029...
result:
ok 151536 numbers
Test #10:
score: 0
Accepted
time: 385ms
memory: 132764kb
input:
3 100000 100000 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 3 1 2 ...
output:
50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 50042766706436 ...
result:
ok 300000 numbers