結果
| 問題 | No.3614 Breaking door keys(LITTLE BREAK ver.) |
| コンテスト | |
| ユーザー |
👑 |
| 提出日時 | 2026-08-06 15:24:27 |
| 言語 | C++23(gnu拡張gcc16) (gcc 16.1.0 + boost 1.90.0) |
| 結果 |
WA
|
| 実行時間 | - |
| コード長 | 1,811 bytes |
| 記録 | |
| コンパイル時間 | 1,235 ms |
| コンパイル使用メモリ | 179,948 KB |
| 実行使用メモリ | 32,128 KB |
| 最終ジャッジ日時 | 2026-08-06 15:24:57 |
| 合計ジャッジ時間 | 17,801 ms |
|
ジャッジサーバーID (参考情報) |
judge2_0 / judge3_0 |
(要ログイン)
| サブタスク | 配点 | 結果 |
|---|---|---|
| サンプル | 0 % | AC * 3 |
| 小課題1 | 10 % | WA * 7 |
| 小課題2 | 20 % | AC * 1 WA * 6 |
| 小課題3 | 30 % | AC * 7 |
| 小課題4 | 30 % | AC * 14 |
| 小課題5 | 10 % | AC * 18 WA * 20 |
| 合計 | 2.5 * 60% = 150 点 |
ソースコード
#include<iostream>
#include<cstdio>
#include<cctype>
#include<cstring>
#include<algorithm>
using namespace std;
#define int long long
int read(){
int w=0;
bool s=0;
char c=getchar();
while(!isdigit(c)){
s=(c=='-');
c=getchar();
}
while(isdigit(c)){
w=w*10+c-'0';
c=getchar();
}
return s?-w:w;
}
const int N=200005,M=50;
int n,m;
struct Tree{
#define mid ((le+ri)>>1)
#define lson le,mid,dep+1
#define rson mid+1,ri,dep+1
struct Node{
int num[N],toleft[N];
};
Node t[M];
int sorted[N];
void build(int le,int ri,int dep){
if(le==ri){
return;
}
int key=sorted[mid];
int equ=mid-le+1;
for(int i=le;i<=ri;i++){
if(t[dep].num[i]<key){
equ--;
}
}
int tl=0;
int it1=le-1,it2=mid;
for(int i=le;i<=ri;i++){
int now=t[dep].num[i];
if(now<key||(now==key&&equ)){
if(now==key){
equ--;
}
tl++;
t[dep+1].num[++it1]=now;
}
else{
t[dep+1].num[++it2]=now;
}
t[dep].toleft[i]=tl;
}
build(lson);
build(rson);
}
int query(int le,int ri,int dep,int x,int y,int z){
if(le==ri){
return t[dep].num[le];
}
int tl=0,del=t[dep].toleft[y];
if(le!=x){
tl=t[dep].toleft[x-1];
del-=tl;
}
int nx,ny;
if(del>=z){
nx=le+tl;
ny=nx+del-1;
return query(lson,nx,ny,z);
}
else{
nx=mid+1+x-tl-le;
ny=nx+y-x-del;
return query(rson,nx,ny,z-del);
}
}
};
Tree T;
signed main(){
n=read(),m=read();
for(int i=1;i<=n;i++){
T.t[0].num[i]=read();
T.sorted[i]=T.t[0].num[i];
}
sort(T.sorted+1,T.sorted+1+n);
T.build(1,n,0);
int x,y,k;
for(int i=1;i<=m;i++){
x=read(),y=read(),k=read();
int ans = 0;
cerr << "query: ";
for(int j = 1; j <= k; j ++) {
ans += T.query(1,n,0,x,y,j);
cerr << T.query(1,n,0,x,y,j) << ' ';
}
cerr << '\n';
printf("%d\n",ans);
}
return 0;
}