QOJ.ac
QOJ
ID | Problem | Submitter | Result | Time | Memory | Language | File size | Submit time | Judge time |
---|---|---|---|---|---|---|---|---|---|
#468985 | #5022. 【模板】线段树 | MODDI | Compile Error | / | / | C++20 | 5.7kb | 2024-07-09 09:13:27 | 2024-07-09 09:13:27 |
Judging History
This is the latest submission verdict.
- [2024-07-09 09:13:27]
- Judged
- Verdict: Compile Error
- Time: 0ms
- Memory: 0kb
- [2024-07-09 09:13:27]
- Submitted
answer
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
typedef pair<int,int> pii;
typedef pair<ll, ll> pll;
typedef vector<int> vi;
typedef vector<ll> vl;
#define pb push_back
#define mp make_pair
void sub1(int n, int q, vector<int> arr){
vector<int> store(n);
while(q--){
int oper;
cin>>oper;
if(oper == 2){
int pos;
cin>>pos;
pos--;
cout<<arr[pos]<<"\n";
}
else{
int l, r;
cin>>l>>r;
l--; r--;
for(int i = l + 1; i <= r; i++){
store[i] = (arr[i] ^ arr[i-1]);
}
for(int i = l + 1; i <= r; i++){
arr[i] = store[i];
}
}
}
for(int i = 0; i < n; i++){
cout<<arr[i]<<"\n";
}
}
void sub23(int sub, int n, int q, vector<int> arr){
const int N = 250000+3;
bitset<N> now, tmp;
if (sub == 2) now[1] = 1;
else for (int i = 1; i <= n; ++i) now[i] = arr[i-1];
int opt, l, r;
while (q--) {
cin>>opt;
if (opt == 1) {
cin>>l>>r;
tmp.set();
tmp >>= l;
tmp <<= (N - r + l);
tmp >>= (N - r);
tmp &= now;
tmp <<= 1;
now ^= tmp;
}else {
cin>>l;
if (sub == 2) {
if (now[l] == 1) cout<<arr[0]<<"\n";
else cout<<0<<"\n";
}
else cout<<(int)now[l]<<"\n";
}
}
if (sub == 2) for (int i = 1; i <= n; ++i) cout<<(now[i] ? arr[0] : 0)<<"\n";
else for (int i = 1; i <= n; ++i) cout<<(int)now[i]<<"\n";
}
void sub4(int n, int q, vector<int> arr){
const int bsz = 505;
struct block{
array<int, bsz> b;
deque<int> d;
array<int, bsz> sms;
int cnt;
void build(){
for(int i = 0; i < bsz; i++){
sms[i] = b[bsz-i-1];
}
for(int j = 0; j < 8; j++){
for(int i = 0; i < 8; i++){
if((i >> j) & 1){
sms[i] ^= sms[i - (1 << j)];
}
}
}
}
void rebuild(int l = 0, int r = 0){
for(int j = 0; j < 8; j++){
if((cnt >> j) & 1){
for(int i = bsz-1; i >= (1 << j); i--){
b[i] ^= b[i- (1 << j)];
}
}
}
cnt = 0;
for(int j = 0; j < 8; j++){
for(int i = 0; i + (1 << j) < (int) d.size(); i++){
if(((i >> j) & 1) == 0){
d[i] ^= d[i + (1 << j)];
}
}
}
for(int i = 0; i < bsz && i < (int) d.size(); i++){
b[i] ^= d[i];
}
d.clear();
for(int i = r; i > l; i--){
b[i] ^= b[i-1];
}
build();
}
void xor_bg(ll x){
if(d.empty()){
d.pb(0);
}
d[0] ^= x;
if(d.size() >= bsz){
rebuild();
}
}
void shift(){
cnt++;
d.push_front(0);
}
void build(const vector<int> &a){
cnt = 0;
d.clear();
for(int i = 0; i < (int) a.size(); i++){
b[i] = a[i];
}
build();
}
int get_lst(){
return sms[cnt & (bsz - 1)];
}
};
struct ask{
int t, l, r;
};
vector<block> s;
vector<ask> queries;
vector<ll> rs;
rs.reserve(q + n);
s.resize((n + bsz - 1) / bsz);
for(int l = 0; l < n; l += bsz){
int r = min(n, l + bsz);
s[l / bsz].build(vector<int>(arr.begin() + l, arr.begin() + r));
}
queries.resize(q);
for(int i = 0; i < q; i++){
int t;
cin>>t;
if(t == 1){
int l, r;
cin>>l>>r;
--l;
--r;
queries[i] = {t, l, r};
}
else{
int pos;
cin>>pos;
--pos;
queries[i] = {t, pos, 0};
}
}
auto b = arr;
for(auto [t, l, r] : queries){
if(t == 1){
while(l / bsz < r / bsz){
int t = r / bsz;
if(r == t * bsz + bsz - 1){
s[t].shift();
}
else{
s[t].rebuild(0, r- t * bsz);
}
s[t].xor_bg(s[t-1].get_lst());
r = t * bsz - 1;
}
int t = l / bsz;
s[t].rebuild(l - t * bsz, r - t * bsz);
}
else{
int pos = l;
int t = pos/bsz;
s[t].rebuild();
int ans = s[t].b[pos - t*bsz];
rs.pb(ans);
}
}
for(int i = 0; i < n; i++){
int t = i / bsz;
if(t * bsz == i){
s[t].rebuild();
}
int ans = s[t].b[i - t * bsz];
rs.pb(ans);
}
for(auto t : rs){
cout<<t<<"\n";
}
}
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
int sub;
cin>>sub;
int n, q;
cin>>n>>q;
vector<int> arr(n);
for(int i = 0; i < n; i++) cin>>arr[i];
if(sub == 1) sub1(n, q, arr);
else if(sub == 2 || sub == 3) sub23(sub, n, q, arr);
else sub4(n, q, arr);
else assert(false);
}
Details
answer.code: In function ‘int main()’: answer.code:215:5: error: ‘else’ without a previous ‘if’ 215 | else assert(false); | ^~~~